我最近开始使用Propel(PHP ORM),我喜欢它,但我有一个很烦人的问题,即使经过大量尝试仍无法解决。我使用逆向工程来创建我的schema.xml,它在连接时非常有用。不幸的是,对于我所有的外键,逆向工程只会添加name
而不是phpName
属性。无论我尝试如何使用此name
属性进行加入,我都会失败。在我手动添加phpName
属性后(然后重建模型),连接工作正常。使用名称属性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.
如果我和值Author
添加phpName
attribut的连接工作正常那样:
$messages = MessagesQuery::create()->joinWith('Author')->findByRecipientId($id);
由于我有很多外键,而且我想要最小/无手动工作,所以问题是:如何解决此问题而无需手动添加所有phpName
属性。我可以找到一种方法来使用常规名称属性访问外键,或者有一种方法可以让构建模型时建立phpName
属性的方法?
我希望有人有一个想法,会是一个很大的帮助! :)
非常感谢您对您有用的答案,尤其是所有的细节。我可能会在未来尝试你的解决方案。由于我几天没有得到答案,我通过编写一个小命令行工具来帮助自己,该工具为模式中的每个外键添加phpName属性。虽然我认为这不能通过一个简单的参数来激活,但这当然不是您的错。再次感谢您的帮助,再次感谢。 – bobinrinder