如何解决symfony doctrine:build-schema error(Unknown relation alias table_name)

时间:2009-10-26 02:12:07

标签: php symfony1 doctrine schema yaml

如何解决此symfony错误:

C:\inetpub\wwwroot\project\trunk\preprod\signup>php symfony doctrine:build-schema --trace
>> doctrine  generating yaml schema from database


  [sfException]
  Unknown relation alias table_name


Exception trace:
  at C:\inetpub\wwwroot\project\trunk\preprod\signup\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\cli\sfDoctrineCli.class.php:69
 sfDoctrineCli->notifyException at C:\inetpub\wwwroot\ project\trunk\preprod\signup\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\ven
dor\doctrine\Doctrine\Cli.php:93
 Doctrine_Cli->run at C:\inetpub\wwwroot\project\trunk\preprod\signup\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\task\sfDoctrineB
aseTask.class.php:112
 sfDoctrineBaseTask->callDoctrineCli at C:\inetpub\wwwroot\project\trunk\preprod\signup\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\li
b\task\sfDoctrineBuildSchemaTask.class.php:57
 sfDoctrineBuildSchemaTask->execute at C:\inetpub\wwwroot\project\trunk\preprod\signup\lib\vendor\symfony\lib\task\sfBaseTask.class.php:63

 sfBaseTask->doRun at C:\inetpub\wwwroot\project\trunk\preprod\signup\lib\vendor\symfony\lib\task\sfTask.class.php:77
 sfTask->runFromCLI at C:\inetpub\wwwroot\ project\trunk\preprod\signup\lib\vendor\symfony\lib\command\sfSymfonyCommandApplication.class.ph
p:76
 sfSymfonyCommandApplication->run at C:\inetpub\wwwroot\project\trunk\preprod\signup\lib\vendor\symfony\lib\command\cli.php:20
 include at C:\inetpub\wwwroot\project\trunk\preprod\signup\symfony:14

3 个答案:

答案 0 :(得分:2)

这是模型和缓存问题(重置所有配置和擦除模型和数据文件)

rm config/doctrine/schema.yml
rm -r cache/*
rm -r data/*
rm -r lib/model/doctrine/base

symfony cc

我发现第二个响应,使用builder.php补丁在symfony 1.2中使用doctrine对象getter也会出现此错误。

答案 1 :(得分:1)

与Symfony 1.4合作的人将很高兴知道清理过时的学说模型是一项任务。 “./symfony doctrine:clean”将摆脱那些讨厌的“那个模型不再存在的问题”。

答案 2 :(得分:0)

其中一个表似乎引用了另一个名为“table_name”的表(除非Doctrine的错误输出替换出现了严重错误)。检查所有表的关系,找出造成这种情况的罪魁祸首,如果它没有效(你实际上有一个名为'table_name'的表吗?)来解决这个问题就删除它。

如果您有很多表,可以尝试将整个数据库复制到临时测试数据库中,然后删除一半表并再次运行generate命令。如果你没有得到错误,你知道表的大块不是问题,所以删除现有的表并恢复另一半。如果仍然发生相同的错误,罪魁祸首现在在当前的块中。继续减半,直到你只剩下一个表格错误,你就会找到你的错误来源。

如果您仍然无法找到问题的确切原因,可以在SQL中提供问题表的结构,以及您正在使用的Doctrine版本。