Laravel:如何通过Eager Loading获取基表的选定列?

时间:2016-07-09 08:58:17

标签: php laravel laravel-5.2 eager-loading

例如这里是表结构。

User
-----
-id
-role_id
-fname
-lname
-country_code
-mobile
-password
-remember_token
-email
-address
-location_id

另一张表

Role
-----
-id
-name

现在,如果我想要来自带有角色表的用户表的所有用户信息,我会这样写。

$ user = User :: with('Role') - > where('users.id',$ id) - > first() - > toArray();

但它会从用户表中获取所有数据。 我需要的是具有预先加载的用户表的选定列。 仅像fname,lname,mobile,来自用户表的电子邮件和来自角色表的role_name。

我知道如何选择关联表的特定列,如下所示。

public function Role(){
    return $this->belongsTo('App\Role')->select('id','name as role_name');
}

但是如何使用with()?

选择User表的特定列

2 个答案:

答案 0 :(得分:0)

尝试这样的事情(我按头写,测试一下):

$user = User::with('Role')
            ->where('users.id',$id)
            ->select('users.fname','users.lname','users.mobile','users.email', 'roles.name as role_name')
            ->first()->toArray();

或直接使用joints

答案 1 :(得分:0)

请试试这个;

User::with(['Role' => function ($query) {
    $query->select('name');
}])->select('fname', 'lname', 'mobile', 'email', 'role_id')->whereId($id)->first()->toArray();