Как сопоставить только начало поля, используя фильтрацию запросов в Laravel - PullRequest
0 голосов
/ 01 мая 2020

У меня есть параметр запроса с URL q, для этого примера, скажем, это foo. Это необходимо использовать для фильтрации name, surname или email записи User.

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

например, пользователь с именем oofoo не должен возвращаться. Я думаю, что это проблема регулярных выражений.

Я использую Eloquent orWhere():

return $this->model->where("id", $blahblahId)
    ->firstOrFail()
    ->where('name', 'like', '%' . $queryParam . '%')
    ->orWhere('surname', 'like', '%' . $queryParam . '%')
    ->orWhere('email', 'like', '%' . $queryParam . '%')
    ->get();

1 Ответ

0 голосов
/ 01 мая 2020

Вы должны иметь% только в конце. Это не Laravel проблема, это просто SQL

  • % xxx% - столбец имеет где-то "xxx" внутри (может быть также начало, конец и точное "xxx")
  • % xxx - столбец заканчивается на «xxx»
  • xxx% - столбец начинается на «xxx»

Так что в вашем случае это будет:

return $this->model->where("id", $blahblahId)
    ->firstOrFail()
    ->where('name', 'like', $queryParam . '%')
    ->orWhere('surname', 'like', $queryParam . '%')
    ->orWhere('email', 'like', $queryParam . '%')
    ->get();

Читать дальше https://www.w3schools.com/sql/sql_like.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...