gpt4 book ai didi

php - 使用查询生成器或 sql 学说

转载 作者:行者123 更新时间:2023-11-29 02:23:56 26 4
gpt4 key购买 nike

我做了一些研究来回答它,但我没有找到。

我想知道在以下之间进行选择(加入)的最佳做法是什么:

使用查询生成器?

$this->getEntityManager()->createQueryBuilder()
->select('e')
->from('Module\Entity\MyEntity 'e')
->innerJoin('Module\Entity\MyEntity2', 'e2', 'WITH', 'e.e2_id = e2.id')...
->where("...")

使用 SQL 语句 ?

$db = $this->getEntityManager()->getConnection();

$sql = "SELECT * FROM myEntity e
INNER JOIN myEntity2 AS e2 ON e2.id = e.e2_id....
WHERE ....;"

它更安全、更快、...?

最佳答案

两者各有优缺点,就看你需要什么了。

SQL

  1. 纯 SQL 语句会快一点,因为您不必执行来自 Doctrine 的额外逻辑
  2. 由于 Doctrine 试图支持很多不同的数据库,一些特定于数据库的功能不受支持,所以你不能使用它们或者必须将它们实现到 Doctrine 中,这会成为很多工作

动态质量语言

  1. Doctrine 强制您使用准备好的语句,只要您坚持使用命名参数,就可以更轻松地防止注入(inject)攻击。但这也可以使用命名参数使用纯 SQL 和 PDO 来完成。
  2. 使用实体要容易得多。数据自动绑定(bind)到对象中,并通过您的应用程序进行管理。当然,这会带来一些性能开销
  3. 连接的一个缺点是您总是连接整个表,而不是只连接您需要的两列。如果结果应该以对对象有用的方式出现,则需要定义关系
  4. 最大的好处可能也是最不常用的:如果您更改数据库,则无需重写所有查询以匹配新的查询结构

有时我发现自己处于可以直接在 SQL 查询中解决问题的情况,但 Doctrine 不支持我必须使用的某些结构。所以我必须决定是否要失去 Doctrine 的好处并选择纯 SQL 解决方案或使用 DQL 并添加更多 php 代码,甚至可能添加更多不必要的查询。但这在很大程度上取决于情况,不能一概而论。

最后我会尽可能使用 DQL,因为它更容易编写和维护,并且只有在我需要一些高性能查询时才切换到 SQL。

关于php - 使用查询生成器或 sql 学说,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26625815/

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