propel Cannot redeclare - Ошибка. Решение (в том числе через refPhpName)
Primary tabs
Ситуация
Путь у нас есть 3 таблицы. Причина
Cannot redeclare
может быть в том, что на данную таблицу (в которой) помимо 1 кроссовой ссылается ещё и другая таблица (№2).
При этом phpName одного внешнего ключа (foreign key) совпадает с phpName таблицы №2 (см. тут поле phpName="CarArrivalTiming")
Если у этих сущностей одинаковый атрибут phpNamе, то в классе 1-ой таблицы будет создано (после propel model:build) 2 поля с одинаковыми именами, что и приводит к ошибке.
следует изменить имя внешнего ключа, скажем на
phpName="CrossCarArrivalTiming"
Решение с помощью refPhpName
В таблицу №2 (которая не кроссовая) для ключа, который ссылается на "проблемную таблицу" (у нас проблемная - это car_arrival_timing_groups) добавляем атрибут refPhpName с имеем отличным от имени phpNamе для внешнего ключа кроссовой таблицы, то есть
изменим (в таблице №2, некроссовой):
<table name="car_arrival_timings" namespace="Logistics" phpName="CarArrivalTiming"> ................ <foreign-key foreignTable="car_arrival_timing_groups" phpName="CarArrivalTimingGroup" onDelete="CASCADE"> .........
на, скажем:
<table name="car_arrival_timings" namespace="Logistics" phpName="CarArrivalTiming"> ................ <foreign-key foreignTable="car_arrival_timing_groups" phpName="CarArrivalTimingGroup" refPhpName="CarArrivalTimingGroupCarArrivalTiming" onDelete="CASCADE"> .........
на базе материала:
stackoverflow.com/questions/12277239/whats-the-most-correct-way-around-this-propel-cannot-redeclare-function-error
Решение без refPhpName (не рекомендуется)
Просто измените имя внешнего ключа кроссовой таблицы на любое отличное от phpName таблицы №2
например:
phpName="CarArrivalTiming"
на:
phpName="CrossCarArrivalTiming"
- Log in to post comments
- 1989 reads