如何在Laravel中按列名获取最新的雄辩关系

时间:2018-08-06 16:35:26

标签: laravel laravel-5 eloquent laravel-5.6

我正在Laravel 5.6上构建一个小型应用程序,其中有两个模型ProjectStatus。在这种情况下,我具有这样的关系:

项目模型中,我拥有:

public function statusUpdate()
{
    return $this->hasMany('App\Status','project_id','id');

}

并获取我的最新状态:

public function latestStatus()
{
    return $this->hasOne('App\Status','project_id','id')->latest();
}

在状态下,我有以下列:datestatussub_statuscomments

我想通过列中提到的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);

3 个答案:

答案 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();
}

这是它的工作方式

  1. statusUpdate方法将建立查询并为其建立设置具有许多关系
  2. latest方法通过子句添加订单
  3. first方法添加limit 1子句,然后执行查询并返回第一个结果