我创建了一个这样的表(表名: supports):
$table->increments('id');
$table->integer('user_id')->unsigned()->nullable();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->integer('parent_id')->unsigned()->nullable();
$table->foreign('parent_id')->references('id')->on('supports')->onDelete('cascade');
$table->text('body');
$table->timestamps();
在支持模型中,我这样做:
public function supports()
{
return $this->hasMany(Support::class , 'parent_id' , 'id');
}
public function latestSupport()
{
return $this->hasOne(Support::class,'parent_id','id')->orderBy('created_at', 'desc')->latest();
}
最后,我尝试在控制器中调用这个函数(在model中):
public function scopeSearch($query, $input)
{
$query->where('parent_id',null);
$query->with('latestSupport');
return $query->latest();
}
它返回根(主题)列表...But,它无法按每个根的最新帖子对根进行排序。
你能告诉我错的地方吗?
编辑:控制器中的:
$supports = Support::Search($input)->paginate(20);
发布于 2018-07-24 02:17:02
我认为您正在寻找的是以下内容,其中我们对相关的created_at
进行排序,而不是根are。为此,我们需要执行子查询(或执行连接)。
public function scopeSearch($query, $input)
{
$query->with('latestSupport');
$query->whereNull('parent_id');
$query->select('supports.*', \DB::raw(
'(SELECT MAX(s2.created_at) FROM supports as s2 WHERE supports.id = s2.parent_id) as sort'
));
$query->orderBy('sort');
return $query;
}
我还将where('parent_id', null)
替换为whereNull('parent_id')
,以利用原生SQL语法实现此目的。
发布于 2018-07-24 04:50:33
尝试替换
$supports = Support::Search($input)->paginate(20);
使用
$supports = Support::Search($input)->latest()->paginate(20);
https://stackoverflow.com/questions/51484534
复制相似问题