我正在Laravel 5.6
上构建一个小型应用程序,其中有两个模型Project
和Status
。在这种情况下,我具有这样的关系:
在项目模型中,我拥有:
public function statusUpdate()
{
return $this->hasMany('App\Status','project_id','id');
}
并获取我的最新状态:
public function latestStatus()
{
return $this->hasOne('App\Status','project_id','id')->latest();
}
在状态下,我有以下列:date
,status
,sub_status
,comments
。
我想通过列中提到的Status
检索latest status
所在的date
我尝试在模型中这样做:
public function latestStatus()
{
return $this->hasOne('App\Status','project_id','id')->latest('date');
}
但是这件事没有解决,请帮助我。谢谢
修改
我正在使用这种关系来渴望加载如下内容:
Project::when( $request->name , function( $q) use( $request ) {
$q->where('name', 'like', '%' . $request->name .'%');
})->with('latestStatus')
->orderBy($request->sort_by_col, $request->order_by)
->paginate(30);
答案 0 :(得分:1)
您可以在关系中使用orderBy。
public function latestStatus()
{
return $this->hasOne('App\Status','project_id','id')->orderBy('date', 'desc');
}
尝试一下。
答案 1 :(得分:0)
您弄错了模型。这就是项目模型中的内容
public function statuses() //plural because a project has many statuses
{
return $this->hasMany('App\Status','id','project_id');
}
如果要获取最新状态,请在控制器中调用它:
Project::where('name', 'like', "%{$request->name}%")->with('statuses', function($q) {
return $q->orderBy('date', $request->order_by);
})->paginate(30);
如果您要更改状态的最新项目,请首先使用状态模型:
public function project()
{
return $this->hasOne('App\Project','project_id','id');
}
在您的控制器中:
$project = Status::latest()->first()->project;
答案 2 :(得分:-1)
在查询末尾添加first
。
public function latestStatus()
{
return $this->hasOne('App\Status','project_id','id')->latest()->first();
}
这是它的工作方式
statusUpdate
方法将建立查询并为其建立设置具有许多关系latest
方法通过子句添加订单first
方法添加limit 1
子句,然后执行查询并返回第一个结果