sql - 如何使用 Laravel 查询生成器从子查询中进行选择?

标签 sql laravel laravel-4 eloquent query-builder

我想使用 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/

相关文章:

sql - 正确使用计数功能

MySQL - InnoDB,缓存查询的一部分以加快执行时间

facebook - Laravel Socialite 与 Facebook 未登录

php - Laravel 高 CPU 使用率 - PHP-FPM

laravel - 在 Laravel 中动态编辑 config/database.php 文件

laravel - Laravel 4 教程 - 身份验证

sql - 将每个用户的最新行转换为列

sql - 在配置单元中拆分列

php - Laravel 关系结构

PHP 文件由浏览器下载,而不是由 Laravel 项目处理