В последнее время я начал использовать Propel (PHP ORM), и мне это нравится, но у меня есть одна довольно неприятная проблема, которую я не могу решить даже при большом количестве попыток. Я использую обратную инженерию для создания моего schema.xml, который отлично работает, пока не придет к объединению. К сожалению, для всех моих внешних ключей обратная инженерия добавляет только name
, а не атрибут phpName
. Что бы я ни пытался использовать этот атрибут name
для соединения, я терпит неудачу. После того, как я вручную добавил атрибут phpName
(а затем, конечно, перестроил модели), соединение работает отлично, как должно.Использование атрибута name для объединений Propel
Вот фрагмент внешнего ключа в schema.xml (без атрибута phpName очевидно):
<foreign-key foreignTable="users" name="messages_ibfk_1">
<reference local="creating_user_id" foreign="id"/>
</foreign-key>
А вот код для моего присоединиться (который не работает):
$messages = MessagesQuery::create()->joinWith('messages_ibfk_1')->findByRecipientId($id);
Я пробовал все виды вариаций для значения joinWith
, но никто не работал. В верхней части схемы эта настройка активна: defaultPhpNamingMethod="underscore"
передвижение ошибки вытаскивает является: Unknown relation messages_ibfk_1 on the Messages table.
Если я добавляю phpName
attribut со значением Author
объединения работает отлично так:
$messages = MessagesQuery::create()->joinWith('Author')->findByRecipientId($id);
Поскольку у меня много внешних ключей, и я хочу работать с минимальной/никакой ручной работой, вопрос: как мне решить эту проблему, не добавляя все атрибуты phpName
вручную. Либо я нахожу способ доступа к внешним ключам с их обычным атрибутом имени, либо есть способ сообщить, что propel установит атрибут phpName
при построении моделей?
Надеюсь, у кого-то есть идея, это будет отличная помощь! :)
Большое спасибо за ваш полезный ответ, особенно все детали. Я могу попробовать ваше решение в будущем. Поскольку я не получил ответа в течение нескольких дней, я помог себе, написав крошечный инструмент командной строки, который добавляет атрибут phpName для каждого внешнего ключа в схеме.Немного грустно, что это не может быть активировано простым параметром, хотя я думаю, но это, конечно, не ваша вина. Ваша помощь очень ценится, спасибо снова. – bobinrinder