@D3V1L

Laravel Eloquent JSON Contains, как передать в функцию массив, и проверить наличие одного из элементов в базе?

Привет, вот код моей функции

protected function room_count($room_count)
{
    $query = $this->builder
        ->whereJsonContains('rent_requests.rooms_count', $room_count);

    return $query;
}


написан на laravel query builder, это функция фильтрации.
в базе поле rooms_count это массив, который может содержать произвольное количество комнат:
примеры: [2, 4] , [3, 2, 1], [1,2,3,4] и так далее.
В фильтры попадает такой же массив, и мне нужно проверить чтобы один из элементов $rooms_count, присутствовал в поле rooms_count в бд.
Использовал функцию JSON Contains, все ок, но он проверяет вхождение всех параметров, а не одного из.
То есть если я передаю [2,4], функция ожидает что в json массиве будет и 2 и 4. А мне нужно как то проверить чтобы если в базе, в поле rent_requests.rooms_count присутствует 2 ИЛИ 4, то данная модель попадала в выборку. Сейчас же если нету ВСЕХ значений фильтра, он просто выбрасывает эту модель

Может кто то сталкивался с таким, или можно сделать по другой логике ?
  • Вопрос задан
  • 554 просмотра
Решения вопроса 1
@D3V1L Автор вопроса
Разобрался, вот конечное решение

// Room Count Filter
protected function room_count($room_count)
{

    return $this->builder
        ->where(function($query) use($room_count){
     
            $query->whereJsonContains('rent_requests.rooms_count', $room_count[0]);
    
            for($i = 1; $i < count($room_count); $i++) {
               $query->orWhereJsonContains('rent_requests.rooms_count', $room_count[$i]);      
            }
    
            return $query;
      });
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы