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 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c