我有3个模型:Shop,Products和Tags。商店和产品是一对多的关系,产品可以标签为多对多。Laravel Eloquent ORM - 通过另一个对象返回对象
我想抓住每个店铺所有独特的标签(因为许多产品可以有相同的标签)。
class Shop extends Eloquent {
public function products() {
return $this->hasMany('Product');
}
}
class Product extends Eloquent {
public function shop() {
return $this->belongsTo('Shop');
}
public function tags() {
return $this->belongsToMany('Tag');
}
}
class Tag extends Eloquent {
public function products() {
return $this->belongsToMany('Product');
}
}
我想出了一个解决方案。问题是我没有获得独特的标签。有一种解决方案可以让另一个foreach循环通过标签数组并比较标签对象中的id。我想优化一点,你认为更好/更清洁的解决方案是什么?
class Shop extends Eloquent {
...
public function getTagsAttribute() {
$tags = array();
foreach($this->products as $product)
{
foreach ($product->tags as $tag)
{
$tags[] = $tag;
}
}
return $tags;
}
}
更好的解决方案 – 2014-09-02 22:48:22
是的,值得注意的是:它执行额外的查询来获取这些标签。这是缺点,但它仍然是实现你所需要的最简单的解决方案。 – 2014-09-02 22:51:42