Laravel Repositories whereHas - multiple

时间:2017-10-12 17:51:08

标签: laravel eloquent repository-pattern

我有以下存储库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 * from   categories上的products_categories内部加入categoriesid =   products_categoriescategories_id其中productsid =   products_categoriesproducts_idid = 1)和(has_relation   =部分))

我看到的问题是它在第一个whereHas上返回了一组项目,这意味着它无法计算第二个项目。对我出错的地方有任何想法吗?

1 个答案:

答案 0 :(得分:0)

您可以将具有多个关系的闭包传递给whereHas

$products = $this->products->whereHas(['categories', function 
        ($category) {
  $category->where('id', '=', 1);
},'bidders' => function($bidders) {

}])->get();

它将按预期工作。