Запрос Laravel, который включает! = Не работает - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть запрос в функции, и он работает нормально, за исключением случаев, когда я хочу что-то исключить.В этом случае все записи с виртуальным = 1 должны быть исключены.

public function index()
   {
    $products = $this->product->where('active', '1')->where('virtual', '!=', '1')->get();
   }

Но если я добавлю, где с! = Результат включает ТОЛЬКО записи со значением 1 вместо всех со значением 0. Таким образом,напротив.

Что мне здесь не хватает?

Ответы [ 2 ]

4 голосов
/ 25 сентября 2019

$this->product Не возвращает экземпляр Builder, и по имени должен возвращать один Product или null.Я предполагаю, что это должно иметь имя products (отношение one-to-many) и возвращать Collection.

Collection s имеет метод where(), но он не принимает операторы, поэтомупервый where() работает, а второй нет.Collection s также имеет метод get(), но требует как минимум один параметр.Ваша ошибка должна выдать ошибку:

Отсутствует аргумент 1 для Illuminate \ Support \ Collection :: get ()

В любом случае, без объяснения, чтобы решить эту проблему, сделайтеубедитесь, что вы используете класс Builder, включив () в свой вызов по телефону:

$products = $this->products()->where('active', '1')->where('virtual', '!=', '1')->get();

Примечание. Имя изменилось на products();отношения, которые возвращают Collection, должны быть названы, чтобы соответствовать.

3 голосов
/ 25 сентября 2019

Это потому, что вы используете коллекцию, а не красноречивый запрос:

Красноречивый запрос:

public function index()
   {
    $products = $this->product()->where('active', '1')->where('virtual', '<>', '1')->get();
   }
public function index()
   {
    $products = $this->product->where('active', '1')->where('virtual', '!=', '1');
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...