2017-01-16 5 views
1

У меня есть категории, связанные друг с другом в дереве. Каждая категория hasMany детей. Каждая конечная категория hasMany продукции.Яркие отношения нагрузки в laravel с условиями по отношению

Изделия также belongsToMany различных типов.

Я хочу охотно загружать категории своими детьми и продуктами, но я также хочу поставить условие, что продукты имеют определенный тип.

Это как моя категория Модель выглядит

public function children() 
{ 
    return $this->hasMany('Category', 'parent_id', 'id'); 
} 


public function products() 
{ 
    return $this->hasMany('Product', 'category_id', 'id'); 
} 

модель продукта

public function types() 
{ 
    return $this->belongsToMany(type::class, 'product_type'); 
} 

В моей базе данных у меня есть четыре таблицы: категории, продукт, тип и product_type

Я так старался загружать, но загружает все продукты, а не только те, которые выполняют условие:

$parentLineCategories = ProductCategory::with('children')->with(['products'=> function ($query) { 
     $query->join('product_type', 'product_type.product_id', '=', 'product.id') 
      ->where('product_type.type_id', '=', $SpecificID); 
    }]])->get(); 

ответ

1

Вместо текущего запроса попробуйте, если это соответствует вашим потребностям. (я изменил мой ответ следующим образом с вашим комментарием)

$parentLineCategories = ProductCategory::with([ 
      'children' => function ($child) use ($SpecificID) { 
       return $child->with([ 
        'products' => function ($product) use ($SpecificID) { 
         return $product->with([ 
          'types' => function ($type) use ($SpecificID) { 
           return $type->where('id', $SpecificID); 
          } 
         ]); 
        } 
       ]); 
      } 
     ])->get(); 
+0

Это все еще дает мне все продукты – user3552551

+0

вы ищете 'продукты', связанные с' children' или родительской категорией ' – Gayan

+0

. Проверьте, не является ли это проблемой данных. т. е. все «товар», принадлежащий к той же «родительской категории» – Gayan

0

Вы можете использовать whereHas, чтобы ограничить результаты, основанные на существовании отношений, как:

ProductCategory::with('children') 
      ->with(['products' => function ($q) use($SpecificID) { 
       $q->whereHas('types', function($q) use($SpecificID) { 
        $q->where('types.id', $SpecificID) 
       }); 
      }]) 
      ->get(); 
Смежные вопросы