为啥我不能创建一个名为“Album”的 Doctrine 模型
Posted
技术标签:
【中文标题】为啥我不能创建一个名为“Album”的 Doctrine 模型【英文标题】:Why can't I create a Doctrine model named 'Album'为什么我不能创建一个名为“Album”的 Doctrine 模型 【发布时间】:2009-12-06 19:08:00 【问题描述】:我在我的项目中使用 Doctrine 作为 ORM,但遇到了一个奇怪的错误:
使用以下 YAML:
Album:
tableName: dpp_album
actAs: [Timestampable]
columns:
name: string(255)
description: string(255)
online: boolean
然后我生成我的模型,但在刷新我的页面并自动加载模型时,php 会出现此错误:
致命错误:类 'BaseAlbum' 不是 在发现 E:\sites\dpp\system\application\models\Album.php 在第 13 行
奇怪的是,我所有的其他模型都很好,并且在这些情况下可以找到基类。
将“专辑”名称更改为“设置”之类的名称时,它可以正常工作!是不是很奇怪?!
因此,尽管错误消息暗示了其他内容,但使用“专辑”似乎存在某种冲突。改成复数Albums也没用,其他都行!
有什么建议吗?
谢谢!
【问题讨论】:
根据您的描述,我猜“Album”是该 ORM 的保留关键字。也许有一种方法可以使用分隔符来规避这个...... 我也是这么想的,不过如果是这样的话,那就太奇怪了!但是在搜索文档和源代码时,我找不到任何名为“专辑”的东西...... :-( google.com/… Google 代码也发现了 Album 类的用途。 当然可以,它是模型的通用名称,但不包含在标准 Doctrine 分布中。 【参考方案1】:问题在于模型类的自动加载顺序。
生成的“基础”模型位于“模型/生成”目录下,其他模型位于上述目录下。
无法确定加载顺序,因此有时模型会在其扩展的基础模型之前加载,从而引发此错误。
在我的引导文件中,我现在明确地包含了目录的加载顺序,如下所示:
Doctrine::loadModels(array(APPPATH.'/models/generated', APPPATH.'/models'));
文档使用了很多生成文件的示例,但在谈到引导配置时没有提到这种行为。
不管怎样,很高兴这个问题现在解决了! :-)
【讨论】:
【参考方案2】:如果设置了选项generateBaseClasses(默认)generateModelsFromYaml() 将在您的情况下创建一个类AlbumBase
(默认在子目录generated
中)和一个空类Album extends AlbumBase
。 IE。如果 Album
被实例化 AlbumBase
必须已经知道或被某个自动加载器加载。
【讨论】:
以上是关于为啥我不能创建一个名为“Album”的 Doctrine 模型的主要内容,如果未能解决你的问题,请参考以下文章
为啥 MapServer 不能识别从 ogrtindex 创建的 shp 文件?
为啥我不能在可可中使用名为“title”的 IBOutlet?