• 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"
          ]
        ]
      ]
  • 相关阅读:
    Python 爬虫简介
    Python 线程池(小节)
    Python platform 模块
    Python term 模块
    python 统计使用技巧
    ArcGIS中的WKID(转)
    c#二维码资料
    How to remove live visual tree?
    新书预告 ArcGIS跨平台开发系列第一本
    visual studio 中删除多余的空白行
  • 原文地址:https://www.cnblogs.com/smallyi/p/6747906.html
Copyright © 2020-2023  润新知