为什么我不能创建一个名为'Album'的Doctrine模型

时间:2009-12-06 19:08:00

标签: php orm doctrine

我在项目中使用Doctrine作为ORM但遇到了一个奇怪的错误:

使用以下YAML:

Album:
  tableName: dpp_album
  actAs: [Timestampable]
  columns:
    name: string(255)
    description: string(255)
    online: boolean

然后我生成我的模型,但在刷新页面并自动加载模型后,PHP会出现此错误:

  

致命错误:类'BaseAlbum'没有   在发现   E:\网站\ DPP \ SYSTEM \程序\型号\ Album.php   第13行

奇怪的是,我的所有其他模型都很好,在这些情况下可以找到基类。

将名称“相册”更改为“设置”时,它才有效!这不奇怪吗?!

所以似乎使用'专辑'有点冲突,虽然错误信息暗示了别的东西。更改为复数相册也不起作用,其他任何东西都没问题!

有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

问题在于模型类的自动加载顺序。

生成的'Base'模型位于'models / generated'目录下,其他目录位于上面目录中。

无法确保加载顺序,因此有时模型会在扩展的基础模型之前加载,从而引发此错误。

在我的bootstrap文件中,我现在明确地包含了目录的加载顺序如下:

Doctrine::loadModels(array(APPPATH.'/models/generated', APPPATH.'/models'));

文档使用大量示例生成生成的文件,但在讨论引导程序配置时没有提及此行为。

无论如何,很高兴现在已经解决了! : - )

答案 1 :(得分:2)

如果设置了选项generateBaseClasses(默认),则在您的情况下,generateModelsFromYaml()将创建一个类AlbumBase(默认情况下在子目录generated中)和一个空类{{1 }}。即如果Album extends AlbumBase已实例化Album必须已知或由某个自动加载器加载。