Eloquent查询AND OR

时间:2018-05-15 15:34:51

标签: php mysql laravel

我有一个场景,我在Laravel中使用Eloquent搜索数据库。

我有以下查询:

$search = $request->get('q');

$users = User::where('username', 'like', '%' . $request->get('q') . '%')
            ->orWhere('displayName', 'like', '%' . $request->get('q') . '%')
            ->orWhere('email', 'like', '%' . $request->get('q') . '%')
            ->orWhere('role', 'like', '%' . $request->get('q') . '%')
            ->orWhere('department', 'like', '%' . $request->get('q') . '%')
            ->orWhere('location', 'like', '%' . $request->get('q') . '%')
            ->orWhere('directDialIn', 'like', '%' . $request->get('q') . '%')
            ->orWhere('mobileNumber', 'like', '%' . $request->get('q') . '%')->get();

我有以下查询范围:

/**
 * Scope a query by published
 */
public function scopePublished($query)
{
    return $query->where('published', 'open');
}

我想使用查询范围只搜索打开的文章。

我知道您可以这样链接whereArticle::where()->where()->where()->get()

我对链接感到有些困惑,但我想说:用LIKE运算符搜索文章列,但仅限于文章打开的位置。

没有密集的声音,是否有一种简单的心态将我的RAW SQL思想转换为Eloquent查询?

在我的脑海中,它将是一个查询打开文章的基本查询,然后是搜索每个字段的嵌套查询。

1 个答案:

答案 0 :(得分:1)

使用嵌套的where()约束:

User::where(function($query) use($request) {
    $query->where('username', 'like', '%' . $request->get('q') . '%')
        ->orWhere('displayName', 'like', '%' . $request->get('q') . '%')
        [...]
})->published()->get();