Laravel 5查询“where(a OR b OR c)AND(d OR e OR f)AND ...(x OR y OR z)”

时间:2015-09-14 23:57:58

标签: laravel

我正在尝试循环查询,例如laravel中标题中的查询。每个周期都是一个新的“AND(x OR y OR z)”条件。

这就是我所拥有的:

$offers = Offer::query();
foreach($values as $val){
    $offers->where('title', 'LIKE', '%'.$val.'%')
    ->orWhere('company', 'LIKE', '%'.$val.'%')
    ->orWhere('location', 'LIKE', '%'.$val.'%')
    ->orWhere('country', 'LIKE', '%'.$val.'%')
    ->orWhere('country_code', 'LIKE', '%'.$val.'%');
}
$offers->get();

然而,这不符合我的要求。

我也试过这个:

$offers = Offer::query();
foreach($values as $val)
{
    $offers->where(function($query, $val) {
        $query->where('title', 'LIKE', '%'.$val.'%')
        ->orWhere('company', 'LIKE', '%'.$val.'%')
        ->orWhere('location', 'LIKE', '%'.$val.'%')
        ->orWhere('country', 'LIKE', '%'.$val.'%')
        ->orWhere('country_code', 'LIKE', '%'.$val.'%');
    });
}
$offers = $offers->distinct()->get();

但这会在$offers->where(function($query, $val)行给出错误:Missing argument 2 for App\Http\Controllers\OffersController::App\Http\Controllers\{closure}()

我可以轻松地在循环中编写原始SQL查询,但我真的想在这里使用Laravel的ORM。

任何想法如何实现?谢谢!

1 个答案:

答案 0 :(得分:0)

当然,答案很简单: $offers->where(function($query) use ($val) {...

: - )