Laravel原始查询:总计带有选择内部计数

时间:2018-10-10 05:36:50

标签: sql laravel

我正在构建一个SQL查询(这是Postgres的问题),它将返回具有所有字段和引用总数的文章列表。

$a = Articles::select(DB::raw('
            *,
            count(
                select * from "references"
                where exists (select * from "users" where "users"."reference_id" = "references"."id"
                and "article_id" = ?????
            ) as total'
    ))->where('created_at', '<', $date)->get();

我简化了一点; count()内部还有更多“存在”条件;还有更多-> where()规则,这些规则是动态的,很难用原始SQL重写。我的主要误解是如何放置相应的article_id而不是?????。有人可以给我一个提示。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

您可以使用PHP数组传入要绑定到原始选择的参数:

$a = Articles::select(DB::raw('
         *,
         count(
             select * from references r
             where exists (select 1 from users u
                           where u.reference_id = r.id and article_id = ?)
        ) as total', ['some id here']))
    ->where('created_at', '<', $date)
    ->get();

也许有更好的方法在Postgres中编写查询。如果您可以添加一些示例数据,那么也许可以说更多。