2012-10-15 1 views
3

Я изменил свои отношения db и некоторые fk. После восстановления схемы и восстановления классов я получаю сообщение об ошибке при попытке использовать классОбъявление нескольких функций внутри «Base Query» после восстановления класса propel

Fatal error: Cannot redeclare BaseHrlibQualificationLevelQuery::filterByHrlibQualification() in C:\wamp\www\cbm_hr\trunk\cbm\plugins\cbmHrLibPlugin\lib\model\om\BaseHrlibQualificationLevelQuery.php on line 717

Я проверил схему, но нет несколько столбцов в одной таблице.

Что еще может привести к нескольким объявлениям функции?

+0

'./symfony propel: build-all -classes-only',' ./symfony cc' и retry – j0k

ответ

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 Fatal error: Cannot redeclare 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 более чем на один внешний ключ.

Я надеюсь, что это поможет.

+0

Это хорошее начало для ответа, но вы действительно не ответили на вопрос OP. попытайтесь дать больше понимания или правильное решение. –

+0

ОП спросил: «Что еще может привести к нескольким объявлениям функции?» Я думаю, что мой ответ дает хотя бы одну возможную причину: несколько внешних ключей к одной таблице. К сожалению, я не знаю никаких других причин, потому что я только начал использовать Propel вчера, поэтому я далеко не эксперт в этом. – Andrew

+0

@ У меня был isCrossRef: True установлен в таблице _has_ и да, у меня также было несколько ссылок на HrlibQualification. Это сработало для меня, когда я удалил isCrossRef. Я не проверял разные phpName и refPhpName, но я думаю, что это тоже сработает. Благодаря! – edocabhi

0

Извините, что я опоздал на это, но решение вашей проблемы лежит в структуре вашей таблицы, у вас есть два внешних ключа, указывающих на одну и ту же ссылку, но один из них не указывает на ваш стол, поэтому вы видите единственный.

решение

выполнить сценарий

SHOW CREATE TABLE table_name 

, чтобы идентифицировать дублированные внешние ключи

затем удалить один, как правило, тот, который не виден с командой

ALTER TABLE table_name DROP FOREIGN KEY `foreign_key_id` 

затем регенерировать съел свою схему с движением назад

вы должны быть хорошими.

Смежные вопросы