2014-11-07 2 views
0

2 개의 테이블, 제품 및 카테고리가 있습니다. 제품은 다른 카테고리에 속하며 카테고리는 상위 카테고리 및 하위 카테고리 관계를 허용하는 트리 구조로 구성됩니다. 특정 카테고리가 주어지면이 카테고리와 모든 하위 카테고리에 속한 페이지가 매겨진 제품을 얻기 위해 어떻게 쿼리를 작성해야합니까?Laravel 여러 카테고리의 항목 매기기

내 설정에서 제품 및 카테고리가 다 대다 관계라는 사실을 잊어 버렸습니다. product_catrgory라는 피벗 테이블이 있습니다.

+0

whereIn ('id', $ ids)'와 관련된 카테고리를 확인하고'$ ids '를 재귀 적으로 가져와야하는 whereHas가 필요합니다. 나는 이것을 위해 더 나은 설정을 생각할 것이다. –

+0

미안하지만, 당신을 잘 이해하지 못했습니까? 각 제품이 하나의 카테고리에 속해야한다는 의미입니까? 전자 상거래 시스템에 대한 전문 지식이 없지만이 관계에 대한 일반적인 설정은 무엇입니까? – dulan

+0

범주의 트리 구조를 의미합니다. 자체 참조 테이블 관계에 대한 다른 유형의 스키마에 대해 읽으십시오. –

답변

0

는 어쩌면 다른 더 좋은 방법이있다 그러나 당신은 이런 식으로 할 수있는 :

$ids = []; 

$ids[] = $category->id; 

foreach ($category->children as $child) { 
    $ids[] = $child->id; 
} 

$products = Product::whereIn('cat_id', $ids)->paginate(15); 
제 생각에는
1
$ids = $category->children()->lists('id'); 

$ids[] = $category->id; 

$products = Product::whereIn('category_id', $ids)->paginate(20); 
+0

+1 +1보다 훨씬 짧아 보입니다. –

+0

@ MarcinNabiałek - 더 짧지 만 효율적인 방법입니다. 이 경우 모든 자식 모델을로드 할 필요가 없습니다. –

+0

제품 및 카테고리가 많은 관계에 있음을 언급하는 것을 잊어 버렸습니다 ... – dulan

0

이 먼저 재귀 카테고리 ID와 모든 하위 카테고리 ID를 얻을 수 있습니다 할 수있는 간단한 방법 . 그리고 whereIn (category id의 배열)을 사용하여 데이터베이스를 쿼리하면 모든 제품을 얻을 수 있습니다. 나는 당신이 하나의 쿼리에서 그것을 할 수 있다고 생각하지 않습니다.