【发布时间】:2014-09-02 18:36:03
【问题描述】:
我有 3 个模型:商店、产品和标签。 Shop 和 Products 是一对多的关系,Products to Tags 是多对多的关系。
我想为每个 Shop 获取所有唯一标签(因为许多产品可以有相同的标签)。
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;
}
}
【问题讨论】:
标签: php laravel model eloquent relation