【问题标题】:SQL to Eloquent ORMSQL 到 Eloquent ORM
【发布时间】:2013-10-02 21:24:08
【问题描述】:

我有一个希望在我的 Laravel 应用程序中使用的 SQL 查询。 SQL查询如下:

SELECT status, count(status) AS num
FROM event_businesses
WHERE event_id = ?
GROUP BY status
ORDER BY status ASC

而我现在拥有的是

$event_businesses = EventBusiness::select('status')
                    ->where('event_id', '=', $event_id)
                    ->groupBy('status')
                    ->orderBy('status', 'asc')->get();

我真的不知道在哪里可以将 count(status) as num 聚合添加到我的 ORM 查询中。

提前致谢!

【问题讨论】:

    标签: sql sql-server orm laravel eloquent


    【解决方案1】:

    您可能需要这样做:

    $event_businesses = EventBusiness::select(DB::raw('status as status, count(status) as count'))
                        ->where('event_id', '=', $event_id)
                        ->groupBy('status')
                        ->orderBy('status', 'asc')->get();
    

    【讨论】:

    • 嗨,安东尼娅,这行得通。但是有什么办法可以避免 DB::raw?
    • 据我所知,Laravel 仍然不支持结果列上的聚合函数。但是您可以在整个结果集上使用聚合:$users = DB::table('users')->count();
    • 可以在原始查询中创建 SQL 注入点。出于这个原因,最好让 sql 构建器为您构建查询。但是在这种情况下,没有任何注入攻击的机会,因为您没有使用 DB::raw 插入任何变量。
    • 现在您可以使用 Eloquent 的 selectRaw()whereRaw()orderByRaw()havingRaw() 方法安全地使用参数绑定强制转换原始查询。 “原始方法”下的详细信息:laravel.com/docs/5.7/queries#raw-expressions
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2014-06-07
    • 2019-03-15
    • 2013-02-12
    • 2016-07-01
    • 2016-09-24
    • 2013-12-28
    相关资源
    最近更新 更多