Laravel如何加入连接表中的所有记录

时间:2018-05-30 18:36:44

标签: mysql laravel

在下面的查询中,我试图从'posts'表中获取来自其他2个表的相关记录的记录:'polls'和'comments'。

但是查询结果会重复“发布”1次,因为“发布”属于“评论”的次数。

例如。如果我的帖子id = 15且该帖子有5条评论,那么结果我有5次帖子id = 15,但有一条不同的评论。

如何编写查询,只有1条“帖子”和“评论”部分中的所有评论?

DB::table('posts')
        ->join('polls', 'posts.id', '=', 'polls.post_id')
        ->join('comments','posts.id','=', 'comments.post_id')
        ->whereMonth('posts.created_at','=',date('m',strtotime("01-04-2018")))
        ->orderBy('polls.yes', 'desc')->get();

谢谢。

1 个答案:

答案 0 :(得分:0)

您应该使用模型和关系:

class Post extends Model {
    public function poll() {
        return $this->hasOne(Poll:class);
    }
}

class Poll extends Model {
    public function comments() {
        return $this->hasMany(Comment:class);
    }
}

class Comment extends Model {}

$posts = Post::whereMonth('created_at', '=', date('m', strtotime("01-04-2018")))
    ->with('poll.comments')
    ->get()
    ->sortByDesc('poll.yes');