Laravel 查询构造器中的子查询选择
使用 Eloquent ORM 的查询构造器从子查询中选择数据可能具有挑战性。本文解决了一个用户面临的特定问题,该用户希望获得使用 GROUP BY 创建的子查询的记录计数。
深入探讨问题:
用户最初尝试使用以下代码解决此问题:
<code class="language-php">$sql = Abc::from('abc AS a') ->groupBy('col1') ->toSql(); $num = Abc::from(DB::raw($sql)) ->count(); print $num;</code>
虽然这种方法看起来合乎逻辑,但它不是最有效的解决方案。
优雅且优化的解决方案:
建议的解决方案涉及使用原始 SQL 和绑定合并的组合:
<code class="language-php">$sub = Abc::where(..) ->groupBy(..); // Eloquent Builder 实例 $count = DB::table(DB::raw("({$sub->toSql()}) as sub")) ->mergeBindings($sub->getQuery()) // 以正确的顺序合并绑定 ->count();</code>
在此解决方案中,子查询使用 Eloquent Builder 实例构建,然后包含在原始 SQL 表达式中。mergeBindings()
方法用于将子查询的绑定与主查询的绑定组合在一起。通过这种方法,您可以高效地从子查询中检索所需数据。
以上是如何使用 GROUP BY 高效计算 Laravel 子查询中的记录数?的详细内容。更多信息请关注PHP中文网其他相关文章!