Получение НУЛЕВЫХ / пустых столбцов в Laravel eloquent query

#php #mysql #laravel #eloquent

#php #mysql #laravel #красноречивый

Вопрос:

В настоящее время я работаю над фильтрами поиска ajax в Laravel, но я не могу получить правильную информацию, это сценарий:

У меня есть 2 таблицы:

  • Таблица 1: SoftwareRequest

  • Таблица 2: DenyCategory

с помощью опции выбора я получаю имя в качестве значения

введите описание изображения здесь

и я добавил эту опцию выбора, как в верхней части запроса к функции контроллера:

 $deniedReason = $request->get('deniedReason');
        if($deniedReason == "All"){
            $deniedReason = "";
        }
  

Таким образом, это означает, что каждый раз, когда я выбираю «Все», он будет пустым, поэтому я могу получить все данные как пустые (в этом проблема).

Это мой текущий запрос:

 $request_data = SoftwareRequest::leftJoin('DenyCategory', 'SoftwareRequest.DenyCategoryId', '=', 'DenyCategory.Id')->where('DenyCategory.Name', 'like', '%' . $deniedReason . '%')->paginate(20);
  

Итак, дело в том, что если я выбираю другой параметр вместо «Все», например «Уже доступно», я получаю исключенные данные, то есть все объекты из таблицы 1, объединенные с таблицей 2, в которой есть этот параметр, но проблема возникает, когда я выбираю «Все», это не приводит ко всем данным, которые должны, и это потому, что не все объекты имеют DenyCategoryId в Table1, что означает, что некоторые из них являются Null / empty, поэтому он приводит только те, которые ‘LIKE’ Null / empty, как я указал в предыдущий блок кода.

 $deniedReason = $request->get('deniedReason');
        if($deniedReason == "All"){
            $deniedReason = "";
        }
  

Как я могу получить все данные пустыми или не пустыми при выборе опции All и, а также получить данные при выборе другого параметра? Бьюсь об заклад, это как-то связано с тем, что запрос не является «Подобным», но это выходит за рамки моих знаний.

Комментарии:

1. Использовать $request->input('deniedReason')

2. привет @Sobir Я получаю значение входных данных, проблема в том, что мне нужно получить ВСЕ данные, включая Null, из объединенного столбца SoftwareRequest. DenyCategoryId с таблицей DenyCategory

3. есть ли способ изменить родительское значение на NotNull, например. ->leftJoin(‘DenyCategory’, ‘NOTNULL(SoftwareRequest. DenyCategoryId)’, ‘=’, ‘DenyCategory. Id’) Поэтому я мог получить только те, в которых есть данные

Ответ №1:

Почему бы не сделать where предложение необязательным?

 $queryBuilder = SoftwareRequest::leftJoin('DenyCategory', 'SoftwareRequest.DenyCategoryId', '=', 'DenyCategory.Id')

// Only apply where-clause when denied reason has been provided.
if ($request->get('deniedReason') !== 'All') {
    $queryBuilder = $queryBuilder->where('DenyCategory.Name', 'like', '%' . $deniedReason . '%');
}

$request_data = $queryBuilder->paginate(20);
  

Я думаю, вы можете немного улучшить свой код, но я оставлю это на ваше усмотрение с некоторыми указателями:

Комментарии:

1. спасибо, я попробую это. Хм, есть ли способ изменить значение table1 на NotNull в левом соединении, например. ->leftJoin(‘DenyCategory’, ‘NOTNULL(SoftwareRequest. DenyCategoryId)’, ‘=’, ‘DenyCategory. Id’) Поэтому я мог получить только те, в которых есть данные

2. Я попробовал то, что вы сказали, и сработало, как ожидалось, спасибо, Дэнни