Laravel:加载关系和特定列

时间:2017-10-10 09:28:04

标签: php mysql laravel-5

我有两张表UserCar。一个用户可能有车。

我有这样的关系:

public function car()
{
    return $this->hasOne('App\Car');
}

我想用汽车取用户,但只选择用户的name和汽车的color

如果我尝试

App\User::with('car:color')->select('name')->first()->toArray();
然后我没有得到汽车的颜色。这就是结果:

array:1 [▼
  0 => array:2 [▼
    "name" => "Max Mustermann"
    "car" => []
  ]
]

是否可以只获取用户的名称和汽车的颜色?

3 个答案:

答案 0 :(得分:1)

失败是因为User表没有color列。您必须访问该关系才能获得颜色。

$user = User::has('car')->first();

print $user->car->color;

AFAIK您将无法仅使用Eloquent Relations获取两个字段。实现此目的的一种方法是使用查询生成器:

DB::table('users')
    ->join('cars', 'users.id', '=', 'cars.user_id')
    ->select('users.name', 'cars.color')
    ->get();

答案 1 :(得分:1)

您可以尝试这样:

User :: Select("*")->with("car")->get();

答案 2 :(得分:1)

这是正确的方法。

$users = User::with('car.color')->select('name')->get();

然后您可以将它们显示为:

foreach($users as $user){
     echo $user->name . " owns a " . $user->car->color . " car.";
}