从右表中获取所有行 - Eloquent Laravel

时间:2016-05-16 07:00:42

标签: mysql laravel eloquent

您好我需要右表中的所有行,但我只能从 LEFT JOINED TABLE 获得最后一行。

表结构如下:

  

表:新闻

id | user_id(pk) | title | name
  

表:news_comments

id | user_id(pk) | news_id(pk) | comment

我尝试的内容如下:

News::select('news.*', 'users.username', 'users.avatar')
                    ->selectRaw('news_comments.comment')
                    ->join('users', 'users.id', '=', 'news.user_id')
                    ->leftJoin('news_comments', function ($join) {
                        $join->on('news_comments.news_id', '=', 'news.id')
                        ->on('news_comments.user_id', '=', 'users.id');
                    })->get();

但是这个查询只返回最后一列。我想要所有属于每条新闻的评论。我也尝试过ELoquent Relationships,但我认为我在某些方面错了。这个你能帮我吗。谢谢

3 个答案:

答案 0 :(得分:0)

select b.title,b.name,a.comment from news_comments a left join news b on a.user_id = b.user_id;

即使新闻中没有相应的记录,也会返回news_comment中的所有记录。

答案 1 :(得分:0)

我没有使用laravel和eloquent但仍然按照mysql知识当你将你的新闻表加入news_comment表时,它将从新闻表中获取所有记录并显示来自news_commet表的最后评论,对应于新闻主键和NULL如果评论不可用,则为值。但你需要的是来自news_comment的所有评论,并从新闻表中显示其相应的细节 所以你必须使用左连接查询,如下所示,不确定它是否可行

DB::table('news_comments')
        ->leftJoin('news', 'news_comments.user_id', '=', 'news.user_id')
        ->get();

通过此查询,您将获得news_comment表中的所有评论和新闻表中的详细信息

答案 2 :(得分:0)

我找到了办法。我通过以下方式做到了:

$news = News::select('news.*', 'users.username', 'users.avatar')
                    ->selectRaw('(select count(*) from news_comments where news_comments.news_id = news.id) as comment_count')
                    ->join('users', 'users.id', '=', 'news.user_id')
                    ->get();