您好我需要右表中的所有行,但我只能从 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,但我认为我在某些方面错了。这个你能帮我吗。谢谢
答案 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();