SQL 到 Eloquent ORM

Posted

技术标签:

【中文标题】SQL 到 Eloquent ORM【英文标题】:SQL to 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 查询中。

提前致谢!

【问题讨论】:

【参考方案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

以上是关于SQL 到 Eloquent ORM的主要内容,如果未能解决你的问题,请参考以下文章

SQL 到 Eloquent ORM

从原始 SQL 到 Laravel Eloquent 或查询构建器

Laravel 从 Raw DB 到 Eloquent

在哪里放置与 Eloquent 无关的 SQL 查询

Laravel五大功能之Eloquent关系模式

Laravel五大功能之Eloquent关系模式