делает where () после get () - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь добавить новую функцию в существующую кодовую базу Laravel, и в этой кодовой базе есть следующее:

    $hasGAP = (new \App\Models\Policy)->where('leadID', $leadId)
        ->where('policystatus', '!=', 'Canceled')
        ->get()->where('product.name', 'GAP Insurance')->count() > 1;

Итак, выполняется SQL-запрос к таблице, на которую ссылается модель \App\Models\Policy,Он делает WHERE policystatus != 'Canceled', а затем получает результат.И тогда он делает WHERE на результат?Это не имеет смысла для меня.

Кроме того, product.name не является столбцом в таблице.Действительно, похоже, что оператор точки (.) был бы недопустимым символом ..

Работает ли этот код на самом деле и если да, то что он на самом деле делает?

1 Ответ

0 голосов
/ 22 мая 2018

->get() завершает запрос и возвращает результаты в коллекции .

Последующие ->where(..) и ->count() затем становятся вызовами коллекции.

Точечная запись широко используется в Laravel для получения подполей массивов, объектов и аналогичных структур данных (пример: array_get () ) и работает в->where() (в коллекции).

Так что отправленный код должен работать.Я предполагаю, что Policy принадлежит (или hasOne) продукту, а точечная нотация используется для поиска по названию соответствующего продукта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...