问题: 使用 Eloquent ORM 从 SQL 子查询中检索计数聚合的值。
最初方法:
<code class="language-php">$sql = Abc::from('abc AS a') ->groupBy('col1') ->toSql(); $num = Abc::from(\DB::raw($sql)) ->count();</code>
这种方法需要手动生成子查询 SQL,这不是理想的做法。
最佳解决方案:
Laravel 查询构建器目前缺乏在 FROM 子句中创建子查询的专用方法。 必须手动使用原始语句,并进行正确的绑定管理:
<code class="language-php">// 定义子查询 $sub = Abc::where(...)->groupBy(...); // Eloquent Builder 实例 // 创建主查询 $count = DB::table(DB::raw("({$sub->toSql()}) AS sub")) ->mergeBindings($sub->getQuery()) // 正确合并绑定 ->count();</code>
注意: 必须以正确的顺序合并绑定。如果在合并后添加了其他条件,则必须调整顺序以确保正确的绑定。
以上是如何使用 Laravel 的查询生成器高效地从子查询中进行选择?的详细内容。更多信息请关注PHP中文网其他相关文章!