在限制Laravel中的父条目后使用eloquent选择相关条目

时间:2015-03-16 15:16:36

标签: php laravel

如果我有一个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();

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

$subcategories = Subcategory::whereHas('category', function($query)
                 {
                     $query->where('title', 'TEST');
                 })
                 ->with('Category')
                 ->get();

此代码将返回包含相关SubCategories的{​​{1}},但前提是相关的Categorycategory.title。另请查看有关querying-relations

的文档