首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >口才关系:如何根据最新帖子对主题进行排序?

口才关系:如何根据最新帖子对主题进行排序?
EN

Stack Overflow用户
提问于 2018-07-24 01:45:23
回答 2查看 94关注 0票数 0

我创建了一个这样的表(表名: supports):

代码语言:javascript
复制
$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();

在支持模型中,我这样做:

代码语言:javascript
复制
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中):

代码语言:javascript
复制
public function scopeSearch($query, $input)
{
    $query->where('parent_id',null);
    $query->with('latestSupport');

    return $query->latest();
 }

它返回根(主题)列表...But,它无法按每个根的最新帖子对根进行排序。

你能告诉我错的地方吗?

编辑:控制器中的

代码语言:javascript
复制
$supports = Support::Search($input)->paginate(20);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-24 02:17:02

我认为您正在寻找的是以下内容,其中我们对相关的created_at进行排序,而不是根are。为此,我们需要执行子查询(或执行连接)。

代码语言:javascript
复制
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语法实现此目的。

票数 1
EN

Stack Overflow用户

发布于 2018-07-24 04:50:33

尝试替换

代码语言:javascript
复制
$supports = Support::Search($input)->paginate(20);

使用

代码语言:javascript
复制
$supports = Support::Search($input)->latest()->paginate(20);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51484534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档