Laravel 5急切加载,从雄辩的关系中选择列

时间:2015-09-23 04:22:13

标签: laravel eloquent eager-loading

我正在尝试

1. select `DOS`,`name`,`fin`,`ins_type` from events table. 
2. site_name from sites table
3. client_name from clients table

但无法访问select语句中的site_name,client_name列

->select('DOS','name','fin','ins_type')  

如何在上面的select语句中添加这些列site.site_nameclient.client_name

Eloquent查询

 $events = Event::with([
                    'site'=>function($q){
                        $q->select('site_id','site_name','client_id');
                    },
                    'site.client'=>function($q2){
                        $q2->select('client_id','client_name');
                    }])
                ->select('DOS','name','fin','ins_type')
                ->get();

3 个答案:

答案 0 :(得分:1)

这个怎么样?

$events = Event::with([
                'site'=>function($q){
                    $q->with(['client'=>function($qq){
                        $qq->select('client_id','client_name');
                    }])->select('site_id','site_name','client_id');
                }])
            ->select('DOS','name','fin','ins_type')
            ->get();

答案 1 :(得分:0)

我在here的评论部分找到了一个简单的解决方案。可以将列选择放在模型中。所以在你的情况下,你的事件模型可能是这样的。

public function site()
{
    return $this->belongsTo('App\Site')->select('id', 'name', 'client_id');
}

然后,在您的控制器中,您只需调用该功能。

$events = Event::with('site')->get();

我还没有尝试过如何使用嵌套的预先加载。

答案 2 :(得分:0)

我自己也遇到了一些问题,直到我发现你需要将外键添加到“with”闭包内的select语句中。

将“客户”与“网站”和“网站”与“活动”相关联的列