首页 >数据库 >mysql教程 >Laravel 提示:whereHas 或 whereRelation?

Laravel 提示:whereHas 或 whereRelation?

Barbara Streisand
Barbara Streisand原创
2025-01-17 12:02:12120浏览

深入了解 Laravel Eloquent:探索 whereRelation 及其实际应用

这篇文章探讨了 Laravel 的 Eloquent ORM,重点关注 whereRelation 方法并将其与旧的 whereHas 方法进行比较。我们将研究它的优点和局限性,指导您实现最佳使用。

场景:检索已完成订单的用户。 在 Laravel 8 之前, whereHas 是查询相关表列的标准。 Laravel 8 引入了 whereRelation,提供了更简洁的语法。

Laravel Tip: whereHas or 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 将为每个条件创建一个单独的子查询,从而使其对于多个条件效率低下。

Laravel Tip: whereHas or whereRelation?

选择正确的 Eloquent 方法对于代码的可读性和效率至关重要。 在选择 whereHaswhereRelation 之前,请考虑查询的复杂性。 快乐编码! ?

以上是Laravel 提示:whereHas 或 whereRelation?的详细内容。更多信息请关注PHP中文网其他相关文章!

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