首页 >数据库 >mysql教程 >如何使用 Laravel 的查询生成器高效地从子查询中进行选择?

如何使用 Laravel 的查询生成器高效地从子查询中进行选择?

Linda Hamilton
Linda Hamilton原创
2025-01-12 07:08:43274浏览

How to Efficiently Select from Subqueries Using Laravel's Query Builder?

使用 Laravel 查询构建器从子查询中选择数据

问题: 使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn