Search code examples
laraveleager-loading

Laravel - manytomany relationship constrain eager load


Many to Many relationship constrain

table:Products Product_id Category

Table:Features Feature_id: 11 Feature_name: remote

Pivot table : FeatureProduct Feature_id Product_id

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

Still get all products with category = 11, not filter out the feature_id = 11

the :with Query where clause, i don't know what should i put, it is the ID belongs to feature.

This is how a single product output

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 ▶}
      ]
    }
  ]

}

Solution

  • Try the below code,

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

    I have edited the answer. please check now