生成的 Doctrine 模型尊重大小写,但生成的 Yaml 不

Posted

技术标签:

【中文标题】生成的 Doctrine 模型尊重大小写,但生成的 Yaml 不【英文标题】:Generated Doctrine models respect case, but generated Yaml does not 【发布时间】:2010-12-14 08:11:03 【问题描述】:

刚刚开始使用Doctrine ORM for php (v1.1.5) 并遇到了意想不到的事情。

我正在使用以下数据库(mysql 4)生成模型:

Doctrine::generateModelsFromDb($pathToModels);

然后使用以下模型从模型生成 YAML:

Doctrine::generateYamlFromModels($pathToSchema . '/schema.yml', $pathToModels);

在生成的模型中,列名(在hasColumn() 中定义)对字段使用与 db.xml 中相同的大小写。都很好。

但在生成的 YAML 中,列名都是小写的,与模型中的大小写无关。

generateYamlFromModels() 方法上似乎没有任何可用的选项可以用来调整它。我是否应该在某个地方设置其他属性,可能是在连接级别,或者在管理级别等?会不会是bug?

非常感谢任何想法。谢谢和欢呼!

【问题讨论】:

我看过问题***.com/questions/1501501/… ORM: Models not respecting case,但在其中一个答案中错过了这一点:
至于字段名称,可以使用 YAML 模式文件的别名功能将它们映射到 camelCase(名称:user_id as userId)。
那么,这就是全部吗?没有办法在 Yaml 生成中获得大小写尊重,但我可以手动调整YAML 使用别名?
看来 Doctrine_Table::setColumn() 将列名设置为小写是因为它没有在其中看到别名。 另一种选择是从 DB 生成模型,然后从模型生成 yaml。这个保留了正确的外壳。 @Dmitri Baltas:这似乎是最好的解决方法。因此,如果您将此移至答案,我会接受。 @edem:最初的问题可以追溯到 2009 年。不记得了,但当时可能是最新的。 【参考方案1】:

这似乎是一个错误。我这么说是因为 YAML is case sensitive 和 Doctrine 的 generateYAMLFromModels() is documented to be case sensitive。我确实找到了 2.0 测试版中的 case sensitivity bug。也许这是影响您的程序的错误。不过,除此之外,Dimitris Baltas 的评论似乎是首选的解决方法:

另一种选择是从 DB 生成模型,然后从模型生成 yaml。这个保留了正确的外壳。

狩猎愉快:)

【讨论】:

以上是关于生成的 Doctrine 模型尊重大小写,但生成的 Yaml 不的主要内容,如果未能解决你的问题,请参考以下文章

如何生成扩展自定义记录类的 Doctrine 模型/类

教义 SQL/表生成失败

将学说查询生成配置为小写

Doctrine 2. 自动生成代理

Doctrine 不映射自己生成的实体

Doctrine 不会生成继承类的属性