【问题标题】:Laravel - manytomany relationship constrain eager loadLaravel - 多对多关系限制急切负载
【发布时间】:2019-08-09 20:32:42
【问题描述】:

多对多关系约束

表:产品 Product_id 类别

表:功能 Feature_id:11 Feature_name:远程

数据透视表:FeatureProduct Feature_id Product_id

$products = App\Product::with([‘features' => function ($query) {
    $query->where(‘id’, 11);
}])->where(‘category_id’, 17)->get();

仍然得到所有 category = 11 的产品,而不是过滤掉 feature_id = 11

:with Query where 子句,我不知道该放什么,它是属于特征的ID。

单品输出是这样的

Product {#1372 ▼
  #original: array:13 [▼
    "id" => 1
    "code" => "PL6881"
    "v_description" => "E14 41 bóng + LED pha lê 642 hạt"
    "width" => 1200
    "length" => null
    "height" => 1800
    "price" => 47800000
    "vendor_id" => 1
    "category_id" => 17
    "active" => 1
    "discount" => 0
    "hero" => 0
    "promote" => 0
  ]
  #relations: array:1 [▼
    "features" => Collection {#5858 ▼
      #items: array:3 [▼
        0 => Feature {#3149 ▼
          #attributes: array:4 [▼
            "id" => 3
            "code" => "Chau Au"
            "v_description" => "Châu Âu"
            "att_cate_id" => 1
          ]
        }
        1 => Feature {#3340 ▶}
        2 => Feature {#3492 ▶}
      ]
    }
  ]

}

【问题讨论】:

    标签: laravel eager-loading


    【解决方案1】:

    试试下面的代码,

    $products = App\Product::with([‘features'])
    ->whereHas(‘features', function ($query) {
       $query->where(‘id’, 11);
    })->where(‘category_id’, 17)->get();
    

    我已经编辑了答案。请立即查看

    【讨论】:

    • "strpos() 期望参数 1 是字符串,给定数组" 得到这个错误
    • $products = Product::whereHas('categories', function ($query) { return $query->where('id', 3); })->get();跨度>
    【解决方案2】:

    其实我觉得这很有用

    $products = Product::with('features')->whereHas('features', function ($query) {
        return $query->where('id', 3);
    })->where('category_id',17)->get();
    

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 2021-11-27
      相关资源
      最近更新 更多