使用generate.php时Doctrine的致命错误

时间:2010-07-22 17:45:44

标签: php doctrine yaml

我正在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)

我对此感到非常难过,我可以让它正确地创建其他非常相似或比这更复杂的表。我也试过重写它。我真的不知道这个错误来自何处。

2 个答案:

答案 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()可以接受   目录数组。

     

希望这能帮助你,请让我   知道您是否需要更多信息。   谢谢!