【问题标题】:Laravel GroupBy and OrderBy problem with sorting orderLaravel GroupBy 和 OrderBy 排序问题
【发布时间】:2020-12-28 09:01:18
【问题描述】:

我有两张桌子。一个带数字的

第二个是 cmets。

我想从每个电话组中获取最新评论,并收集唯一的电话号码和由 cmets 最新发布的最新评论。

我确实尝试过这样的事情,但结果并不好。 我从组中获得了唯一的号码,但这个号码得到了最旧的评论。我需要编号和最新评论。 谢谢你。

【问题讨论】:

  • 最好以文字而非图片的形式发布。
  • 请添加代码 sn-p 而不是发布图像。要插入代码 sn-p,快捷键组合是 Ctrl+k。还有什么是关联这些表的外键?
  • 是的,外键是表cmets中的commentable_id

标签: mysql laravel eloquent sql-order-by


【解决方案1】:

最好使用 eloquent eager loading,这样你的输出更有条理,使用 dd() 来查看你的输出。

public function index () {
    $telephones = Telephone::with(['comments' => function ($q) {
        $q->orderBy('created_at', 'desc');
    }])
        ->orderBy('telephones.created_at', 'desc')
        ->paginate(3);
}

这样,cmets 在附加到电话之前先排序。

【讨论】:

  • 它的一部分工作,但我无法访问 cmets 表,我现在可以将 cmets 粘贴到它上并仅显示最新 cmets 的数字吗?外键“commentable_id”谢谢
  • @Marcin - cmets 表是变形表吗?
  • 我认为不,不是变形表,但不确定 100%
  • 你能显示电话的模型类吗?
【解决方案2】:

我认为你应该使用子查询来获得你想要的结果。

尝试使用类似的东西:

$subQuery = "
        select * from comments where created_at in (select max(created_at) from comments group by commentable_id)
    ";

    $query = DB::table('telephones')->leftJoin(
        DB::raw(
            "($subQuery) as comments"
        ), function(Builder $query) {
        $query->on('telephones.id','=', 'comments.commentable_id');
    })->select(['number', 'comment']);

    $result = $query->get();

您可以为模型更改此查询

【讨论】:

    【解决方案3】:

    在检查和搜索此代码后,我可以按照我想要的方式正常工作。 它给了我一个最新评论的电话号码。

     public function index()
    {
        $telephones = Telephone::join('comments', function ($join) {
            $join->on('telephones.id', '=', 'comments.commentable_id');
        })
            ->select('*')
            ->whereIn('comments.id', function($q){
                $q->select(DB::raw('MAX(comments.id) FROM comments GROUP BY commentable_id'));
            })
            ->latest('comments.created_at')
            ->paginate(3);
    

    谢谢

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      相关资源
      最近更新 更多