【问题标题】:How to get last value for each foreign key in laravel?如何获取laravel中每个外键的最后一个值?
【发布时间】:2026-02-18 12:10:01
【问题描述】:

我有两张桌子——posts 和 cmets。每个帖子都有很多cmets。我需要检索他曾经回复过的所有帖子的用户的最后一个 cmets。就像他多次评论帖子一样,我只需要对该帖子的最后评论。 因此,如果他对 10 个帖子发表了 43 次评论,我只需要 10 个 cmets(每个帖子最后的那些)。

我试过了:

Comment::where('user_id', $user_id)
               ->orderBy('created_at','DESC')
               ->distinct('post_id')
               ->get(); 

但它会返回他所有的 cmets。

【问题讨论】:

  • “它返回他所有的 cmets”是什么意思?如果你有distinct('post_id'),你应该得到每个帖子的最新评论。你能提供一个数据库行的样本和你想要获取的行/你正在获取的行吗?

标签: laravel eloquent


【解决方案1】:

我制作了一个示例 cmets 表并尝试使用以下数据库查询返回所需的结果。

这里是代码。

$data = DB::table('comments as c1')
                ->select('c1.col_2', 'c1.col_2')
                ->leftJoin('comments as c2', function($join) {
                    $join->on('c1.post_id', '=', 'c2.post_id');
                    $join->on('c1.id', '<', 'c2.id');
                })
                ->whereNull('c2.id')
                ->limit(10)
                ->get();

【讨论】:

    【解决方案2】:

    将关系放入您的“post”模型(“post.php”)中。

    public function comments(){ return $this->hasMany('App\Comments','id_post','id'); }

    public function last10comment (){ return $this->comments()->orderBy('created_at','DESC')->take(10)->get(); }

    试试你的控制器: 在每个帖子上调用 $post->last10comment()` //返回数组/集合

    【讨论】:

    • 这如何解决 OP 的问题?当您不知道用户评论了多少帖子时,使用take 是没有意义的。如果用户评论了 50 条帖子,你会将-&gt;take 更改为 50 吗?我不认为这就是 OP 所追求的......
    • 好的,我修好了。如果 OP 想要显示用户每个帖子的所有最后 10 条评论,只需在每个帖子上调用“$post->last10comment”。或使用 .map 函数
    最近更新 更多