gpt4 book ai didi

php - Laravel Eloquent Relationships——相当于 MYSQL "join"

转载 作者:行者123 更新时间:2023-11-29 01:36:18 25 4
gpt4 key购买 nike

似乎在 Laravel Eloquent 关系可以做的所有事情中,不可能让它添加 INNER JOIN 子句。我说得对吗? whereHas 子句添加一个 WHERE EXISTS 子查询,而 with 子句预制“预先加载”,仅在单独的查询中加载关系。

显然,在很多情况下,INNER JOIN 比运行一堆查询方式更有效率,所以我写了一个 join 这些查询的子句。

  1. 是否可以使用 Eloquent 关系来定义 join 子句,这样我就不必在每次同时使用 2 个表时都重写相同的连接查询?

  2. 如果不是,为什么?似乎加入 2 个相关的表应该标准化。我真的看不出添加像 WHERE EXISTS 这样的子查询是一个合适的替代方法。 (根据我的测试,它生成的查询慢得多....)

最佳答案

就像@Jackowski 指出的那样,joins can be performed using the query builder

至于为什么 Laravel 框架使用多个查询而不是连接(例如加载关系),这是因为连接通常很昂贵,原因如下:

  1. 联接通常会调用笛卡尔积,因此速度很慢。当然,这也取决于您的索引以及查询优化器的工作方式
  2. 联接不可扩展:为什么?连接在分片数据库/表分区上非常非常低效。一旦开始扩展到多个服务器并对数据库进行分片,就需要删除代码中的所有连接。一个很好的例子是 Pinterest - 随着他们的扩展,they had to remove all joins for sharding

当然,联接仍然可以使用查询构建器完成,但 Laravel 将问题强加给开发人员:你真的需要联接还是有其他方法?

免责声明:泛泛而谈是危险的,您应该始终考虑您的具体用例

关于php - Laravel Eloquent Relationships——相当于 MYSQL "join",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42490935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com