我正在拉拉韦尔(Laravel)中尝试关系,我无法弄清楚这一点。
我有两个表users
和vehicles
。用户可以驾驶车辆,并且经常更换驾驶员。为了跟踪这些更改,我创建了一个history
表。该表包含user_id
,vehicle_id
,start
和end
。
我想通过“历史记录”表获取当前用户正在驾驶的车辆。
class User extends model {
public function vehicle()
{
// return the current active vehicle for the user
// through the History model.
return $this->hasOne(History::class, 'user_id');
}
public function history()
{
// return all the vehicles that the user has used
// this currently returns the history rows, not the cars
return $this->hasMany(History::class, 'user_id');
}
}
class Vehicle extends model {
public function user()
{
// return the current active user
}
public function users()
{
// return all the users that used this vehicle
}
}
如果我在控制器中执行以下方法。
public function showUser()
{
return User::findOrFail(1)->with('vehicle', 'history')->get()
}
我希望响应的格式如下:
[
0: {
first_name: 'John',
...
vehicle: {
model: 'BMW ...'
}
history: {
0: {
model: 'BMW ...'
}
1: {
model: 'Audi ...'
}
...
}
}
]
答案 0 :(得分:0)
您可以在历史记录模型中添加query scope,以返回最新记录。
public function scopeLatest($query)
{
return $query->orderBy('created_at', 'desc')->limit(1);
}
那么你可以通过你的人际关系得到它
$user->history()->latest()->first()->vehicle;
当然,这需要您在历史记录类别中定义车辆关系。