Laravel 5.5에 범주 및 제품이 있습니다 각 제품에는 카테고리가 있으며 카테고리에는 상위 카테고리가있을 수 있습니다. 나는 그것이 보여 질 때 카테고리의 모든 아이들의 제품을 얻고 싶다. 예 : 의류는 cateogry이며 셔츠, 자켓 등과 같은 하위 카테고리가 있으며 의류 카테고리에서 클릭하면 셔츠 또는 재킷 카테고리가있는 모든 제품을 표시하려고합니다. 나는 "cloth1", "cloth2"와 "셔츠 1"세 가지 제품을 내 경우Laravel 관계가 두 번 항목을 반환합니다
public function children()
{
return $this->hasMany('App\Category', 'parent_id');
}
public function products()
{
return $this->hasMany('App\Product');
}
public function getAllProducts()
{
$products = $this->products;
foreach ($this->children as $child) {
foreach ($child->products as $product) {
$products[] = $product;
}
}
return $products;
}
: 여기 내 Category.php 모델이다. "cloth1"과 "cloth2"는 옷 카테고리에 속하고 "shirt1"은 옷의 하위 카테고리 인 셔츠 카테고리에 속합니다. 나는 옷 카테고리 페이지에있을 때 그래서 ("cloth1", "cloth2"와 "셔츠 1") 모든 제품을 게재하려는 그러나보기에
{{dd($category->getAllProducts())}}
반환 "cloth1", "cloth2" "shirt1", "shirt1"(셔츠를 두 번 돌려줍니다). 어떤 아이디어가 왜, 어떻게 고쳐야할까요?
편집 : 나는 "cloth1"와 "cloth2"나는 셔츠 카테고리에 그것을 시도 할 때 (어떻게해야되는) 한 번만 "셔츠 1"을 반환
를 반환하는 의류 카테고리에$category->products
을하려고 할 때 함수가 지금과 같은
'$ this-> products'와'$ this-> children'에'()'이 누락 된 오타가 있습니까? –
아니요. laravel 관계가 그런 식으로 작동한다는 것을 알고있는 한, 대괄호는 함수가 관계를 반환하지 않을 때만 필요합니다. – TheAngelM97
자, 이제는'$ products'에 이미 배열이 포함되어 있기 때문에'$ products []'루프에 같은 값을 다시 추가하는 것만으로 반환 배열의 이름을 다른 것으로 바꿀 수 있습니다. 루프에서'dd()'를 시도하여 그 일을 확인하십시오. –