php - Laravel 原始查询并包含模型关系

标签 php mysql laravel eloquent

我正在尝试返回带有子查询的单个帖子,以包括反对票和赞成票的计数。我可以通过使用原始查询来实现这一点。

但是这样做意味着我无法再访问后期模型关系,例如评论。

是否有更多 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/

相关文章:

php - 浏览器删除 session 或删除历史记录如何工作?

mysql - 如何在node.js lambda aws中的httpget请求中获取mysql数据

mysql - 我如何更改mysql中的起始ID号

php - MySql 查询以检索 xml 的元素属性的值

php - 如何获取关系数据库中列的总和 "Laravel5"

laravel - 在 Laravel 查询范围内查询相关模型

php - 无法在 Blade 中显示两列结果,laravel 5.1

php - 在使用 PDO 的结果中使用列的值作为索引

php - PHP 中位标志的最佳实践

php - 在 Flot 图表上显示数据库中的值(使用 mySQL)