【问题标题】:Using eloquent select related entries after restricting parent entry in Laravel在 Laravel 中限制父条目后使用 eloquent 选择相关条目
【发布时间】:2015-03-16 15:16:36
【问题描述】:

如果我有一个 laravel 类,比如 Category,它与另一个类有 1:many 的关系,比如 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 via:

    $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();

【问题讨论】:

  • 必须是单个查询还是可以多个?此外,如果多个Category 符合您的条件怎么办?您的查询应该返回返回的多个类别的所有子类别,还是只有一个类别匹配?
  • 真正有效的,1 个或多个查询。理想情况下,这将是一个类似于 Category::find(1)->subcategories 的单个查询,但更像是 Category::findTitle('TEST')->subcategories。或者,我个人只匹配一个类别。

标签: php laravel


【解决方案1】:

你可以试试这样的:

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

此代码将返回SubCategories,包括相关的Category,但前提是相关的category.titleTEST。另请查看有关querying-relations 的文档。

【讨论】:

    猜你喜欢
    • 2016-05-22
    • 2021-11-17
    • 2021-09-20
    • 2021-04-08
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多