3

我修改了我的数据库和一些 fk 关系。重建架构和重建类后,我在尝试使用该类时收到一条错误消息

致命错误:无法在 C:\wamp\www\cbm_hr\trunk\cbm\plugins\cbmHrLibPlugin\lib\model\om\BaseHrlibQualificationLevelQuery.php 中重新声明 BaseHrlibQualificationLevelQuery::filterByHrlibQualification() 行 717

我检查了架构,但同一个表中没有多列。

还有哪些事情会导致函数的多次声明?

4

2 回答 2

5

我刚刚遇到了类似的问题。尽管您的问题没有提到您是否有多个外键指向同一个外部表,但我怀疑这就是问题所在。

我有:

<foreign-key foreignTable="dish" phpName="Dish" refPhpName="Menu">
  <reference local="soup_id" foreign="id"/>
</foreign-key>
<foreign-key foreignTable="dish" phpName="Dish" refPhpName="Menu">
  <reference local="main_id" foreign="id"/>
</foreign-key>

我收到了这个错误信息:

PHP 致命错误:无法重新声明 BaseMenuQuery::filterByDish()

然后我更改了 phpName 和 refPhpName 属性(需要后者,因为 Propel 将在外部表类中生成 filterBySomething() 函数,所以在我的例子中,有多个 filterByMenu() 函数名):

<foreign-key foreignTable="dish" phpName="soupDish" refPhpName="sMenu">
  <reference local="soup_id" foreign="id"/>
</foreign-key>
<foreign-key foreignTable="dish" phpName="mainDish" refPhpName="mMenu">
  <reference local="main_id" foreign="id"/>
</foreign-key>

所以我猜你有多个外键引用 HrlibQualification 表。

我希望这会有所帮助。

于 2012-10-16T15:36:52.683 回答
0

对不起,我迟到了,但你的问题的解决方案在于你的表的结构,你有两个指向同一个引用的外键,但其中一个没有指向你的表,这就是为什么你只看到一个。

解决方案

执行脚本

SHOW CREATE TABLE table_name

识别重复的外键

然后删除一个通常是命令不可见的那个

ALTER TABLE table_name DROP FOREIGN KEY `foreign_key_id`

然后用反向推进重新生成你的模式

你应该很高兴。

于 2015-10-01T19:54:33.437 回答