php - 如何在 Laravel 中使用多表查询而不使用 Eloquent 关系
问题描述
我正在使用 Laravel 为我的应用程序创建 API,稍后它将与 react 前端集成。我有两张表,发布和评论。帖子表包含有关帖子的信息,评论表包含有关每个帖子的评论数据。下面是结构,
- 发布表
post_id(主键) post_title post_description
- 评论表
comment_id(主键) comment_text post_id(外键)
我需要从 post 表中获取 post_id、post_title 以及评论表中每个帖子的评论总数,并希望 json 数据像这样显示
{
"post_id": 1,
"post_title": "some title",
"total comments": "4"
},
我知道如何为这些编写 sql 查询,但只是在显示上述数据时遇到问题。下面是我正在使用的代码。
$allPostQuery= DB::select('select * from post');
foreach($allPostQuery as $allPostQuery)
{
$postId= $allPostQuery->post_id;
$totalCommentsQuery= DB::select('select count(comment_id) as totalComments from comment where post_id=:postId',["postId" => $postId ]);
}
return \Response::json([$allPostQuery,$totalCommentsQuery]);
但这不起作用。我对循环发布帖子 ID 以获得每个帖子的总评论感到困惑。我是否必须在前端使用 react foreach 循环来执行此操作?任何人都可以提出任何帮助。谢谢
解决方案
根据您的问题,您只需要每个帖子的帖子 ID、标题和评论数:
$query = DB::select('
SELECT
p.post_id,
p.title,
c.total AS totla_comments
FROM posts p
INNER JOIN
(
SELECT post_id, COUNT(post_id) AS total FROM comments WHERE comments.post_id = post_id
GROUP BY post_id
) c
ON p.post_id = c.post_id
');
echo json_encode($query);
如果您希望数据返回应为 JSON 格式,请使用json_encode
(Laravel 有功能)。->json()
看看你的方法:
- 首先你查询帖子
- 您再次循环帖子并查询评论
这将影响您的性能速度,应该避免。
推荐阅读
- python - 拆分已经在列表中的字符串
- javascript - 为什么我收不到邮件?
- javascript - 使用 expressJS 通过电子邮件确认注册
- docker - 如何在 docker-compose for Windows server 2016 上修复“HNS 失败并出现错误:未指定错误”
- nats.io - NATS Streaming Server 在使用集群时被关闭
- javascript - BindSelect2 不适用于选择框
- loops - 如何解析 CF 结构
- python - Python代码问题-尝试创建一个脚本来定位文件,对其进行编辑并将其另存为新文件
- ruby-on-rails - 如何从 Rails 5 API only 应用程序提供本地图像 url
- ios - 适用于 iOS 的 Google 地图叠加层可访问性问题