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的主要内容,如果未能解决你的问题,请参考以下文章