嵌套" with()" laravel

时间:2018-02-19 12:45:06

标签: laravel eloquent

我遇到了一些关系问题。我有以下情况

产品:

public function catalogues()

 {
     return $this->belongsToMany('App\Catalogue');
 }

public function category()
{
    return $this->belongsTo('App\Category');
}

类别:

 public function products()
   {
       return $this->hasMany('App\Product');
   }

目录:

    public function products()
   {
       return $this->belongsToMany('App\Product');
   }

使用单个查询,我需要获取包含属于某个目录的产品的所有类别。我怎样才能实现它?

2 个答案:

答案 0 :(得分:2)

使用whereHas()

Category::whereHas('products.catalogues', function($q) use($catalogueId) {
    $q->where('catalogues.id', $catalogueId);
})
->get();

或者:

Category::whereHas('products', function($q) use($catalogueId) {
    $q->whereHas('catalogues', function($q) use($catalogueId) {
        $q->where('id', $catalogueId);
    })
})
->get();

答案 1 :(得分:0)

您需要whereHas

    Category::whereHas('products')
  ->with(['products' => function($query) use ($id){
        $query->with('catalogues' => function($query) use ($id){

         $query->where('catalogues.id',$id);

      });

   }])
  ->get();

希望这有帮助。