如果我有一个laravel类,比如Category,它与另一个类有1:很多关系,比如Subcategory,我如何查询所有子类别,并对Category类有限制?
例如,查询所有子类别,其中Category类的标题为“TEST”。
class Category extends Model
{
public function subcategories()
{
return $this->hasMany('App\Subcategory');
}
}
class Subcategory extends Model {
public function category(){
return $this->belongsTo('App\Category');
}
}
我通过以下方式尝试了eager loading:
$subcategories = Subcategory::with(['category' => function($query)
{
$query->where('title', '=', 'TEST');
}])->get();
// Returns ALL subcategories, with null where the category doesn't = TEST
我对这样做的所有方法感兴趣!
编辑 - 两个解决方案:
$data = Category::whereTitle('TEST')->first()->subcategories
//or equivalently:
$data = Category::whereTitle('TEST')->get()[0]->subcategories;
或在子类别中使用@The Alpha的解决方案
创建动态范围public function scopeFromCategory($query, $type)
{
return $query->whereHas('Category', function ($q) use ($type)
{
$q->whereTitle($type);
});
}
// So you can later call
$data = Subcategory::FromCategory('TEST')->get();
答案 0 :(得分:1)
您可以尝试这样的事情:
$subcategories = Subcategory::whereHas('category', function($query)
{
$query->where('title', 'TEST');
})
->with('Category')
->get();
此代码将返回包含相关SubCategories
的{{1}},但前提是相关的Category
为category.title
。另请查看有关querying-relations。