douwei1174 2018-07-23 17:45
浏览 51
已采纳

雄辩关系:如何通过最新帖子订购主题?

I created a table like this (table name: 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();

in support model I do this:

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

And Finally I try call this function (in model) in controller:

public function scopeSearch($query, $input)
{
    $query->where('parent_id',null);
    $query->with('latestSupport');

    return $query->latest();
 }

It return list of root (topics) ...But It couldn't sort roots by newest post for each root.

Could you please tell me the wrong?


Edit: in controller:

$supports = Support::Search($input)->paginate(20);
  • 写回答

2条回答 默认 最新

  • dougang1605 2018-07-23 18:17
    关注

    I think what you are looking for is the following, where we sort on the related created_at instead of the root one. To achieve this, we need to perform a subquery (or perform a join).

    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;
    }
    

    I also replaced where('parent_id', null) by whereNull('parent_id') to utilize the native SQL grammar for this.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器