Объект класса Illuminate \ Database \ Query \ Builder не может быть преобразован в строку в Laravel - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь добавить orwhere, используя приведенный ниже синтаксис для поиска:

->where(function($query) {
    $query->where(DB::raw("g.title"), 'LIKE', "%{$query}%");
    $query->orWhere(DB::raw("s.step"), 'LIKE', "%{$query}%");
})

, но я получаю следующую ошибку

Object of class Illuminate\Database\Query\Builder could not be converted to string

Он работает нормально, если я использовал обычный синтаксис, как показано ниже:

->where(DB::raw("g.title"), 'LIKE', "%{$query}%")
->orwhere(DB::raw("s.step"), 'LIKE', "%{$query}%")

Но я добавлю еще одно условие where, поэтому я должен использовать первый синтаксис.

1 Ответ

1 голос
/ 05 мая 2020

Вы определяете $query дважды. И в вашем where() Closure и как значение. Также, когда вы используете замыкания и то, что для доступа к значениям за пределами области действия, вы должны использовать оператор use(). Этот код не включен, но я предполагаю, что он выглядит примерно так и будет работать так.

// replace this with whatever $query is in your code, from outside the closure scope
$search = $request->get('query');

Model::query()
    ->where(function($query) use ($search) {
        $query->where(DB::raw("g.title"), 'LIKE', "%{$search}%");
        $query->orWhere(DB::raw("s.step"), 'LIKE', "%{$search}%");
    })
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...