我有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