Запрос Laravel найти запятую и нормальную строку - PullRequest
1 голос
/ 03 ноября 2019

Я получил столбец с именем fac, в котором значения могут быть одним числом, например 2, а также разделяться запятыми, например 2,4,5

enter image description here

Я хочу получить данные из базы данных через api. Также значение может быть как одинарным, так и запятыми. так что пользователь может искать так:

localhost/api/search {fac: 1}

Или

localhost/api/search {fac: 1,4,5}

Я использовал find_in_set, нопохоже, что он не работает в этом случае:

$fac = request('fac');

->whereRaw("find_in_set({$fac}, fac)")->get();

Если я запусту этот localhost/api/search {fac: 1}, он ничего не вернет, если я запусту localhost/api/search {fac: 1,4,5}, он выдаст мне ошибку:

Синтаксическая ошибка или нарушение доступа: 1582 Неверный счетчик параметров при вызове собственной функции 'find_in_set'

Цель:

Если поиск пользователя1 должно возвращать все данные, которые содержат 1, если поиск 1,7 должен возвращать все данные, которые содержат 1 и 7

1 Ответ

1 голос
/ 03 ноября 2019

Сначала преобразуйте строку, разделенную запятыми, в массив. И создайте необработанный запрос.

$fac = request('fac'); // single value or comma saperated string
$data = explode(',',$fac);
$str='';
$i=1; // to append AND in query

foreach ($data as $key => $value) {
  $str .= 'FIND_IN_SET("'.$value.'" ,fac)';
  if($i < count($data)){
    $str .=' AND '; // use OR as per use
  }
  $i++;
}

Теперь $ str будет содержать необработанный запрос

FIND_IN_SET("1", fac) AND FIND_IN_SET("7", fac)

, и вы можете использовать его в eloquent.

->whereRaw($str)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...