深入了解 Laravel Eloquent:探索 whereRelation
及其实际应用
这篇文章探讨了 Laravel 的 Eloquent ORM,重点关注 whereRelation
方法并将其与旧的 whereHas
方法进行比较。我们将研究它的优点和局限性,指导您实现最佳使用。
场景:检索已完成订单的用户。 在 Laravel 8 之前, whereHas
是查询相关表列的标准。 Laravel 8 引入了 whereRelation
,提供了更简洁的语法。
改进后的语法无疑更干净!
性能和局限性:一个常见的误解是 whereRelation
优于 whereHas
。 然而,分析表明两者都会生成相同的 SQL 查询:
whereHas
查询:
<code class="language-sql">select * from `users` where exists ( select * from `orders` where `users`.`id` = `orders`.`created_by` and `status` = ? and `orders`.`deleted_at` is null ) and `users`.`deleted_at` is null</code>
whereRelation
查询:
<code class="language-sql">select * from `users` where exists ( select * from `orders` where `users`.`id` = `orders`.`created_by` and `status` = ? and `orders`.`deleted_at` is null ) and `users`.`deleted_at` is null</code>
主要区别在于功能。 whereRelation
仅限于相关表上的单个条件,而 whereHas
支持单个子查询中的多个条件。 whereRelation
将为每个条件创建一个单独的子查询,从而使其对于多个条件效率低下。
选择正确的 Eloquent 方法对于代码的可读性和效率至关重要。 在选择 whereHas
或 whereRelation
之前,请考虑查询的复杂性。 快乐编码! ?
以上是Laravel 提示:whereHas 或 whereRelation?的详细内容。更多信息请关注PHP中文网其他相关文章!