Laravel where 条件不适用于查询 WITH 关系
Posted
技术标签:
【中文标题】Laravel where 条件不适用于查询 WITH 关系【英文标题】:Laravel where condition not working on query WITH relation 【发布时间】:2019-10-17 11:53:02 【问题描述】:我有一个如下所示的简单查询:
$category = Category::with('translation')
->with(['childCategories' => function ($query)
$query->active();
])
->where('id', $id)->first();
范围和关系:
public function scopeActive($query)
return $query->where('active', 1);
public function childCategories()
return $this->hasManyThrough('App\SupremeShop\Models\Category',
'App\SupremeShop\Models\CategoryToCategory',
'id_parent_category', //category_to_categories
'id', //categories
'id',
'id_category'); // category_to_categories.
所以我正在寻找给定“主要”类别的类别、一些翻译和子类别。查询返回 15 个子类别。但在查询中是应该只采用活动的范围,并且它无法正常工作。当我使用 dd 时,它也显示不活动的子类别。我试图删除范围并编写简单的 WHERE 但结果是一样的。
有人知道为什么条件不能正常工作吗?
【问题讨论】:
【参考方案1】:我认为问题在于该列不明确,因为 Category
及其关系 childCategories
都是同一个模型并共享同一个表。
active()
范围被应用到父 Category
而不是子 Categories
。
试试看是否可行
$category = Category::from('categories as c')
->with(['childCategories' => function ($query)
$query->active();
])
->where('id', $id)->first();
【讨论】:
以上是关于Laravel where 条件不适用于查询 WITH 关系的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 的 DB 查询中编写两个 where 条件?
if 和 else 条件在 laravel 中不适用于数据数组