追踪车辆和驾驶员的历史

时间:2018-09-17 14:19:49

标签: php laravel eloquent

我正在拉拉韦尔(Laravel)中尝试关系,我无法弄清楚这一点。

我有两个表usersvehicles。用户可以驾驶车辆,并且经常更换驾驶员。为了跟踪这些更改,我创建了一个history表。该表包含user_idvehicle_idstartend。 我想通过“历史记录”表获取当前用户正在驾驶的车辆。

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 ...'
      }
      ...
    }
  }
]

1 个答案:

答案 0 :(得分:0)

您可以在历史记录模型中添加query scope,以返回最新记录。

public function scopeLatest($query)
{
    return $query->orderBy('created_at', 'desc')->limit(1);
}

那么你可以通过你的人际关系得到它

$user->history()->latest()->first()->vehicle;

当然,这需要您在历史记录类别中定义车辆关系。