Конвертировать необработанный SQL запрос в Eloquent - PullRequest
1 голос
/ 06 февраля 2020

Мне нужна ваша помощь, ребята. У меня есть этот запрос:

SELECT * FROM users
where lcase(concat(firstname, ' ', lastname)) like lcase(concat('%', replace('%searchterm%', ' ', '%'), '%'))
OR lcase(concat(lastname, ' ', firstname)) like lcase(concat('%', replace('%searchterm%', ' ', '%'), '%'))
OR lcase(location) like lcase('%searchterm%')

Можно ли использовать хороший красноречивый запрос вместо DB :: select (DB :: raw ()), чтобы использовать нумерацию страниц?

Ответы [ 2 ]

3 голосов
/ 06 февраля 2020

Вы можете использовать методы whereRaw и orWhereRaw в Eloquent Builder, чтобы использовать необработанные выражения, сохраняя при этом возможность получать экземпляры модели в результате.

Преимущество заключается в том, что вы все равно можете использовать параметр PDO связывание и, следовательно, избегать SQL инъекций, хотя $searchTerm.

. Вы также можете узнать больше о необработанных выражениях в документации ;

// Assuming $searchTerm contains the term that you need to search the database for

$users = User::whereRaw('lcase(concat(firstname, " ", lastname)) like lcase(concat("%", replace("%?%", " ", "%"), "%"))', [ $searchTerm ])
    ->orWhereRaw('lcase(concat(lastname, " ", firstname)) like lcase(concat("%", replace("%?%", " ", "%"), "%"))', [ $searchTerm ])
    ->orWhereRaw('lcase(location) like lcase("%?%")', [ $searchTerm ])
    ->get();
1 голос
/ 06 февраля 2020

Чтобы разделить ваше условие where, вы можете использовать метод или Где .

User::
  ->where(DB::raw('condition_one'))
  ->orWhere(DB::raw('condition_two'))
  ->orWhere(DB::raw('condition_three'))
  ->paginate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...