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

时间:2015-04-25 23:07:51

标签: doctrine-orm

学说手册说:

  

Doctrine不会自动引用标识符,因为这会引导   比它解决的更多问题。

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

1 个答案:

答案 0 :(得分:3)

此引用来自Basic Mapping部分下的旧版文档。最新文档不再包含此文本,但它仍然是

最新文档的Limitations and Known Issues部分阐明了这一点:

  

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

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

有关SQL生成复杂程度的提示,请浏览git repository中的代码。

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

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

  1. 手动引用标识符,请参阅Basic Mapping部分。
  2. 创建遵循前面提到的最佳做法的数据库视图。
  3. PS:对于那些不知道的人:“标识符”是指主键,而是指表,列,索引等的名称。