首页 文章

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

提问于
浏览
0

我在尝试着

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 .

雄辩的查询是

$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

    这个怎么样?

    $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

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

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

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

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

    我还没有尝试过如何使用嵌套的eager loading .

  • 0

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

    将“client”与“site”和“site”关联到“Event”的列

相关问题