我有以下存储库Products
,每个产品可以包含多个Categories
和多个Bidders
我想要实现的是以下(没有存储库)
$products = Products::whereHas('categories', function ($category) {
})->whereHas('bidders', function ($bidder) {
})->get();
这样可以正常工作,但是,我正在努力使存储库到位并且您仍然可以执行whereHas
查询,因此在我的存储库中我创建了一个方法:
public function whereHas($attribute, \Closure $closure = null)
{
return $this->model->whereHas($attribute, $closure);
}
这很有效,但只有在我的主查询中使用其中一个,而如果我使用多个:
$products = $this->products->whereHas('categories', function ($category) {
$category->where('id', '=', 1);
})->whereHas('bidders', function($bidders) {
})->get();
我收到以下错误:
Unknown column 'has_relation'
未找到列:1054未知列'has_relation'位于'where 子句'(SQL:select * from
products
where exists(select * fromcategories
上的products_categories
内部加入categories
。id
=products_categories
。categories_id
其中products
。id
=products_categories
。products_id
和id
= 1)和(has_relation
=部分))
我看到的问题是它在第一个whereHas
上返回了一组项目,这意味着它无法计算第二个项目。对我出错的地方有任何想法吗?
答案 0 :(得分:0)
您可以将具有多个关系的闭包传递给whereHas
$products = $this->products->whereHas(['categories', function
($category) {
$category->where('id', '=', 1);
},'bidders' => function($bidders) {
}])->get();
它将按预期工作。