我在项目中使用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行
奇怪的是,我的所有其他模型都很好,在这些情况下可以找到基类。
将名称“相册”更改为“设置”时,它才有效!这不奇怪吗?!
所以似乎使用'专辑'有点冲突,虽然错误信息暗示了别的东西。更改为复数相册也不起作用,其他任何东西都没问题!
有什么建议吗?
谢谢!
答案 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
必须已知或由某个自动加载器加载。