세 가지 모델 : 상점, 제품 및 태그가 있습니다. 상점과 제품은 일대 다 관계에 있고, 제품은 태그가 많고 많게는 많습니다.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');
}
}
내가 제안한 해결책 중 하나는 다음과 같습니다. 문제는 고유 태그를 얻지 못한다는 것입니다. 태그 배열을 통과하고 태그 객체의 id를 비교하기 위해 다른 foreach 루프를 두는 해결책이 있습니다. 조금 더 최적화하고 싶습니다. 어떻게하면 좋고/깨끗한 해결책이라고 생각합니까?
class Shop extends Eloquent {
...
public function getTagsAttribute() {
$tags = array();
foreach($this->products as $product)
{
foreach ($product->tags as $tag)
{
$tags[] = $tag;
}
}
return $tags;
}
}
더 나은 해결책 –
예, 주목할 가치가 있습니다. 태그를 가져 오기 위해 추가 쿼리를 실행합니다. 그것은 단점이지만 여전히 필요한 것을 얻기위한 가장 쉬운 해결책입니다. –