为什么Doctrine2不会自动引用所有SQL标识符?

Vla*_*sny 8 doctrine-orm

学说手册说:

Doctrine不会自动引用标识符,因为这会导致更多问题,而不是解决问题.

引用一切究竟是什么问题?

Jas*_*wer 3

此引用来自旧版本文档的“基本映射”部分。最新的文档不再包含此文本,但它仍然是 true

最新文档的限制和已知问题部分对此进行了一些说明:

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

由于不同的 SQL 供应商使用不同的引用策略,以及 ORM 生成 SQL 的方式,因此很难找到适用于所有情况的解决方案。而且更难维护。这可能并非不可能,但 Doctrine 团队认为不值得花时间和(也许更重要的是)代码复杂性来尝试。

有关 SQL 生成有多复杂的提示,请浏览git 存储库中的代码。

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

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

  1. 手动引用标识符,请参阅基本映射部分。
  2. 创建遵循前面提到的最佳实践的数据库视图。

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