Красноречивый запрос И ИЛИ - PullRequest
0 голосов
/ 15 мая 2018

У меня есть сценарий, в котором я ищу в базе данных, используя Eloquent в Laravel.

У меня следующий запрос:

$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');
}

Я хочу использовать область запроса только для поиска открытых статей.

Я знаю, что вы можете связать where вот так: Article::where()->where()->where()->get()

Я немного запутался с цепочкой, но хочу сказать: искать столбцы статей с помощью оператора LIKE, но только там, где статья открыта.

Не звучит ли плотно, есть ли простой способ преобразовать мою мысль RAW SQL в Eloquent запросы?

В моей голове это был бы базовый запрос для поиска открытых статей, а затем вложенный запрос, который просматривает каждое поле.

1 Ответ

0 голосов
/ 15 мая 2018

Использовать вложенное where() ограничение:

User::where(function($query) use($request) {
    $query->where('username', 'like', '%' . $request->get('q') . '%')
        ->orWhere('displayName', 'like', '%' . $request->get('q') . '%')
        [...]
})->published()->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...