###
今天在連表獲取數據的時候,老是獲取不到想要的,確實有點無力適從的感覺。
歸根到底,還是對laravel不夠熟悉,至少是數據庫操作那塊。
###
問題是這樣的:
我想要通過連表中間表,拿中間表的id。但是product 在關聯的中間表中有多個,需要brandId,categoryId去限制獲取,然后就可以獲取到,但是我實際操作的時候卻不是想要的結果。
獲取的是categoryId=50 ,brand_id=1 的所有商品,還有需要中間表的id
array:10 [▼0 => array:21 [▼"id" => 323 "name" => "" "snumber" => "" "number" => 0 "product_categories" =>
0 => array:6 [▼ "id" => 20 "product_id" => 323 "category_id" => 2 "brand_id" => 1 "created_at" => "2017-04-17 13:16:42" "updated_at" => "2017-04-17 13:16:42" ] 1 => array:6 [▼ "id" => 458 "product_id" => 323 "category_id" => 1 "brand_id" => 1 "created_at" => "2017-04-17 15:40:34" "updated_at" => "2017-04-17 15:40:34" ] 2 => array:6 [▼ "id" => 758 "product_id" => 323 "category_id" => 50 "brand_id" => 1 "created_at" => "2017-04-17 17:21:30" "updated_at" => "2017-04-17 17:21:30" ] 3 => array:6 [▼ "id" => 991 "product_id" => 323 "category_id" => 47 "brand_id" => 1 "created_at" => null "updated_at" => null ] ]
] 1 => array:21 [▶] 2 => array:21 [▶] 3 => array:21 [▶] 4 => array:21 [▶] 5 => array:21 [▶] 6 => array:21 [▶] 7 => array:21 [▶] 8 => array:21 [▶] 9 => array:21 [▶] ]
我只想要的是product_categories 中的第2個數組就行
方法是:
$productIds = ProductCategories::where('category_id', $categoryId) ->where('brand_id', $brandId) ->pluck('product_id', 'id') ->all(); $products = Product::whereIn('id', $productIds) ->with('productCategories') ->whereHas('productCategories', function ($q1) use ($categoryId, $brandId) { return $q1->where(['brand_id' => $brandId,'category_id' => $categoryId]); }) ->get();
發現這樣操作並不行。。。
搞好久還是老實的去看文檔
$productIds = ProductCategories::where('category_id', $categoryId) ->where('brand_id', $brandId) ->pluck('product_id', 'id') ->all(); $products = Product::whereIn('id', $productIds) ->with(['productCategories' => function ($q1) use ($categoryId, $brandId){ $q1->where(['brand_id' => $brandId ,'category_id' => $categoryId]); }]) ->get();
結果就可以了:
array:10 [▼ 0 => array:21 [▼ "id" => 323 "name" => "" "snumber" => "" "number" => 0
"product_categories" => array:1 [▼ 0 => array:6 [▼ "id" => 758 "product_id" => 323 "category_id" => 50 "brand_id" => 1 "created_at" => "2017-04-17 17:21:30" "updated_at" => "2017-04-17 17:21:30" ] ] ]