我有两张表User
和Car
。一个用户可能有车。
我有这样的关系:
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" => []
]
]
是否可以只获取用户的名称和汽车的颜色?
答案 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.";
}