2014-07-24 134 views
1

您好我使用Laravel與許多到數據透視表的關係沒有問題,但我無法繞過我需要編寫的邏輯創建使用2透視表的3個模型之間的關係執行類似下面的查詢:Laravel與3個表和兩個數據透視表的關係

select * from product 
left join product_to_category on product_to_category.product_id = product.product_id 
left join category on product_to_category.category_id = category.category_id 
left join category_to_brand on category_to_brand.category_id = category.category_id 
left join brand on brand.brand_id = category_to_brand.brand_id 
where brand.key = 'furniture-hire-uk' 
and category.slug = 'chair-hire' 

表結構如下:

產物 產品ID 一些更精密組件

類別 類別ID 一些更精密組件

品牌 brand_id 關鍵 一些更精密組件

product_to_category PRODUCT_ID CATEGORY_ID

category_to_brand CATEGORY_ID brand_id

+0

這是非常straightforwad'產品:: leftJoin() - > leftJoin() - >其中() - >其中() - >獲取([列你需要])' - 你嘗試過嗎? –

+0

我知道我可以使用查詢生成器做它,但我問的是如何使用雄辯關係這樣做: Brand :: where('key','=','furniture-hire-uk') - >類別() - >其中( '蛞蝓', '=', '椅租用') - >產品; 我可以做什麼像關係船或關係船不能用於3表與兩個數據透視表? –

回答

3

使用關係:

// assuming relations: 
categories: Product belongsToMany Category 
brands: Category belongsToMany Brand 
// and tables according to your question: 
product, category, brand 

$slug = 'chair-hire'; 
$key = 'furniture-hire-uk'; 

Product::whereHas('categories', function ($q) use ($slug, $key) { 
    $q->where('category.slug', $slug) 
    ->whereHas('brands', function ($q) use ($key) { 
     $q->where('brand.key', $key); 
    }); 
})->get(); 

或手動連接:

Product::join('product_to_category as pc', 'product.id', '=', 'pc.product_id') 
     ->join('category', function ($j) use ($slug) { 
     $j->on('category.id', '=', 'pc.category_id') 
      ->where('category.slug', '=', $slug); 
     }) 
     ->join('category_to_brand as cb', 'category.id', '=', 'cb.category_id') 
     ->join('brand', function ($j) use ($key) { 
     $j->on('brand.id', '=', 'cb.brand_id') 
      ->where('brand.key', '=', $key); 
     }) 
     ->get(['product.*']) 
+0

謝謝你的工作就像一個魅力 –