Laravel 5.2数据库--多个关联关系,带条件约束的渴求式加载的问题
###
今天在连表获取数据的时候,老是获取不到想要的,确实有点无力适从的感觉。
归根到底,还是对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"
      ]
    ]
  ]
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号