我有以下代码:
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'
答案 0 :(得分:3)
with()
实际上会执行多个查询-它会获取Visitor
查询的ID列表,然后对上面带有checker
的{{1}}表进行后续查询
如果您想限制急切加载的操作(例如WHERE id IN (1, 2, 3...)
),可以执行select()
仅选择某些列。
您将以相同的旧方式访问关系数据-作为结果模型的属性。因此,在您的访问者列表中,with('checker:id,foo,bar')
。
(顺便说一句,您可以在没有$visitor->checker->name
调用的情况下执行此操作。with()
确实会进行紧急加载,如果您选择 multiple ,这将为您节省大量查询访客模型。)
答案 1 :(得分:1)
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