我想使用 Eloquent ORM 通过以下 SQL 获取值(value)。
- SQL
SELECT COUNT(*) FROM
(SELECT * FROM abc GROUP BY col1) AS a;
然后我考虑了以下内容。
- 代码
$sql = Abc::from('abc AS a')->groupBy('col1')->toSql();
$num = Abc::from(\DB::raw($sql))->count();
print $num;
我正在寻找更好的解决方案。
请告诉我最简单的解决方案。
最佳答案
除了@delmadord 的回答和您的评论之外:
目前还没有在FROM
子句中创建子查询的方法,因此您需要手动使用原始语句,然后,如果需要,您将合并所有绑定(bind):
$sub = Abc::where(..)->groupBy(..); // Eloquent Builder instance
$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )
->mergeBindings($sub->getQuery()) // you need to get underlying Query Builder
->count();
请注意,您需要以正确的顺序合并绑定(bind)。如果您有其他绑定(bind)子句,则必须将它们放在 mergeBindings
之后:
$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )
// ->where(..) wrong
->mergeBindings($sub->getQuery()) // you need to get underlying Query Builder
// ->where(..) correct
->count();
关于sql - 如何使用 Laravel 查询生成器从子查询中进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24823915/