@ganjo888

Как написать запрос правильно Laravel?

Выводит ошибку что мало аргументов в аноноимной функции, помогите осуществить задуманный запрос
foreach ($filters as $filter) {
            if ($filter['operation'] === 'in') {
                $builder = $builder->whereHas('resource', function ($query, $filter) {
                    $query->whereIn($filter['name'], $filter['value']);
                });
            } else {
                $builder = $builder->whereHas('resource', function ($query, $filter) {
                    $query->where($filter['name'], $filter['value']);
                });
            }
        }
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
netrox
@netrox
foreach ($filters as $filter) {
  
            if ($filter['operation'] === 'in') {
                $builder = $builder->whereHas('resource', function ($query) use ($filter) {
                    $query->whereIn($filter['name'], $filter['value']);
                });
            } else {
                $builder = $builder->whereHas('resource', function ($query) use ($filter) {
                    $query->where($filter['name'], $filter['value']);
                });
            }
        }
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
hOtRush
@hOtRush
$builder = $builder->whereHas('resource', function ($query) use ($filter) {
    $method = $filter['operation'] === 'in' ? 'whereIn' : 'where';
    $query->$method($filter['name'], $filter['value']);
});
Ответ написан
Комментировать
@NubasLol
Для чего 2 одинаковых запроса?Используйте функцию ниже которая, она обернет в массив значение, если оно не массив

array_wrap

$builder = $builder->whereHas('resource', function ($query, $filter) {
                    $query->whereIn($filter['name'],  array_wrap($filter['value']));
                });
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы