Как использовать select в Laravel, чтобы получить значение связанного поля? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть следующий код:

return Visitor::with("checker")
               ->select(
                    'idVisitor', 
                    'firstname', 
                    'lastname', 
                    'middlename',
                    'birthday',             
                    'document_number', 
                    'pincode', 
                    'company', 
                    'idEvent',
                    'code',
                    'checker.name' 
                    'status'
                )
               ->whereIn("idVisitor", $this->ids)
               ->get();

Как видите, я использую связанную модель: with("checker").

Как получить значение этого поля в select()?

Я пытался: 'checker.name'

Ответы [ 2 ]

3 голосов
/ 24 июня 2019

with() фактически выполняет несколько запросов - он возьмет список идентификаторов запроса Visitor, а затем выполнит последующий запрос к таблице checker с WHERE id IN (1, 2, 3...) на нем.

Если вы хотите ограничить выборку загружаемой загрузки (например, select()), вы можете сделать with('checker:id,foo,bar'), чтобы выбрать только определенные столбцы.

Вы получите доступ к данным взаимосвязи таким же старым способом - как свойство в полученных моделях. Итак, в вашем списке посетителей, $visitor->checker->name.

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

1 голос
/ 24 июня 2019
Visitor::select('visitors.*', 'checker.name as checkerName')
    ->join('checkers', 'visitor.id', '=', 'checkers.idVisitor')
    ->whereIn('checkers.idVisitor', $this->ids)
    ->get();

Как вы хотите, это должно работать, но я бы порекомендовал использовать энергичную загрузку с помощью метода with ().

Подробнее об этом можно прочитать здесь: https://laravel.com/docs/5.8/eloquent-relationships#eager-loading

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