我正在http://www.Doctrine-project.org/处理Doctrine教程,当我尝试运行生成模型并在数据库中生成表格的generate.php脚本时,我收到致命错误:
Fatal error: Class 'BaseCharity' not found in ...\models\Charity.php on line 14
generate.php:
require_once('bootstrap.php');
Doctrine_Core::dropDatabases();
Doctrine_Core::createDatabases();
Doctrine_Core::generateModelsFromYaml('schema.yml', 'models');
Doctrine_Core::createTablesFromModels('models');
和schema.yml
Charity:
actAs: [Timestampable]
columns:
active:
type: boolean
default: '1'
owed: decimal(32,2)
totalPayed: decimal(32,2)
name: string(255)
website: string(255)
description: text
icon: string(255)
我对此感到非常难过,我可以让它正确地创建其他非常相似或比这更复杂的表。我也试过重写它。我真的不知道这个错误来自何处。
答案 0 :(得分:1)
答案 1 :(得分:0)
发现这个:
http://www.doctrine-project.org/jira/browse/DC-344
嗨,我偶然发现了同样的事情 问题,我想我知道在哪里 问题是。
所以 Doctrine_Core :: createTablesFromModels() 调用Doctrine_Export :: exportSchema() 反过来打电话 Doctrine_Core :: loadModels()。
Doctrine_Core :: loadModels()使用 RecursiveIteratorIterator并迭代 找到所有找到的文件。
现在我认为文件的顺序 由RecursiveIteratorIterator返回 并不总是一样的(取决于操作系统, 文件名和宇宙辐射),但是 这里最重要的是 来自'modules / generated'的类文件 目录(如示例中所示)不是 包含在子类派生之前 来自生成的类。这意味着 Doctrine_Core :: autoload()失败了 从中加载类 完全是'modules / generated'目录 此检查失败:
if(0!== stripos($ className, 'Doctrine_')|| class_exists($ className,false)|| interface_exists($ className,false))
因为基类不是以 'Doctrine_'并且尚未加载。
要正确修复它的算法 加载模块必须更改为 首先包括'modules / generated' 课程,然后其余的课程。我是 不确定,但也许Core :: autoload() 可能会更改为包含基数 上课正确。
快速解决方法:快速 解决方法我改变了参数 调用createTablesFromModels()来:
Doctrine_Core :: createTablesFromModels(阵列( '机型/生成', '模型'));
as createTablesFromModels()可以接受 目录数组。
希望这能帮助你,请让我 知道您是否需要更多信息。 谢谢!