如何在Laravel中使用select获得相关字段值?

时间:2019-06-24 19:22:03

标签: php laravel laravel-5 eloquent

我有以下代码:

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 个答案:

答案 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