Doctrine orm 为什么Doctrine2没有';是否自动引用所有SQL标识符?

Doctrine orm 为什么Doctrine2没有';是否自动引用所有SQL标识符?,doctrine-orm,Doctrine Orm,条令手册说: 条令不会自动引用标识符,因为这会导致 解决的问题比解决的问题还多 引用所有内容到底有什么问题?此引用来自文档的较旧版本,在该部分下。最新的文档不再包含此文本,但它仍然是真实的 最新文档的这一部分说明了这一点: 出于所有受支持供应商之间的兼容性原因和边缘案例问题,原则2不进行自动标识符引用 由于不同的SQL供应商使用不同的报价策略,以及ORM生成SQL的方式,很难找到一个适用于所有情况的解决方案。而且更难维持。这可能不是不可能的,但条令团队认为这不值得花时间(也许更重要的是)测试代码

条令手册说:

条令不会自动引用标识符,因为这会导致 解决的问题比解决的问题还多


引用所有内容到底有什么问题?

此引用来自文档的较旧版本,在该部分下。最新的文档不再包含此文本,但它仍然是真实的

最新文档的这一部分说明了这一点:

出于所有受支持供应商之间的兼容性原因和边缘案例问题,原则2不进行自动标识符引用

由于不同的SQL供应商使用不同的报价策略,以及ORM生成SQL的方式,很难找到一个适用于所有情况的解决方案。而且更难维持。这可能不是不可能的,但条令团队认为这不值得花时间(也许更重要的是)测试代码的复杂性

有关SQL生成有多复杂的提示,请浏览中的代码

通常的最佳做法是仅使用字母数字字符(和下划线)作为标识符,而不使用保留关键字。如果您遵循这些,就不需要引用标识符

如果您确实需要,因为您处理的是遗留数据库,Doctrine提供了两种解决方案:

  • 标识符的手动引用,参见章节
  • 创建遵循前面提到的最佳实践的数据库视图

  • PS:对于那些不知道的人来说:“标识符”不是指主键,而是指表、列、索引等的名称。

    谢谢你的回答,但它并没有真正回答我的核心问题。你能给我一个引用标识符有多复杂的例子吗?我一直认为它就像“获取类型X的标识符”(X=表、列、数据库名称等)和“对其应用引用策略Q(X)”(通常只是包装成某种引号)一样简单。是吗?我想你可以这样看:想象你创建了你提议的系统,支持所有DB供应商的条令支持。现在想象一下将该系统整合到学说中。尽量估计所需的时间和资源。这值得你从中得到好处吗?顺便说一句,文档中出现这句话的主要原因是因为不久前有一个很好的讨论:大多数ORM和类似的状态由于引用而不受SQL注入的影响。但大多数只引用值,而不是标识符。这被认为具有误导性。很多ORM都更新了文档,明确提到它们不引用标识符。是的,我理解。我可以阅读手册,我可以想象复杂性等,但问题仍然是关于例子。我只是想看看他们。