Laravel 原始查询并包括模型关系

pat*_*kot 5 php mysql laravel 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];
Run Code Online (Sandbox Code Playgroud)

Tim*_*olf 2

尝试这个

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();
Run Code Online (Sandbox Code Playgroud)