我正在尝试返回带有子查询的单个帖子,以包括反对票和赞成票的计数。我可以通过使用原始查询来实现这一点。
但是这样做意味着我无法再访问后期模型关系,例如评论。
是否有更多 Eloquent 方法可以保持模型关系?
或者是否有更好的方法来解决整个问题?很想听听你会怎么做。
$post = DB::select(
"SELECT post.*,
(SELECT COUNT(*) FROM posts_votes
WHERE type = 1
AND post_id = posts.id)
AS up_votes,
(SELECT COUNT(*) FROM posts_votes
WHERE type = 2
AND post_id = posts.id)
AS down_votes
FROM posts
INNER JOIN posts_votes ON posts.id = posts_votes.post_id
WHERE posts.id = ?", [$id])[0];
最佳答案
试试这个
Post::select('*')
->addSelect(DB::raw('
(select count(*)
from posts_votes
where type = 1
and post_id = posts.id)
as up_votes
'))
->addSelect(DB::raw('
(select count(*)
from posts_votes
where type = 2
and post_id = posts.id)
as down_votes
'))
->whereIn('id', $ids)
->get();
关于php - Laravel 原始查询并包含模型关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43757062/