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" ] ] ]

 

转载于:https://www.cnblogs.com/smallyi/p/6747906.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值