我有以下表格:
user
,logbook
,user_logbook
用户日志是一个联结表(schema.xml中的isCrossRef="true"
),包含user_id
和logbook_id
个外键。
我还想记住任何给定用户当前选择的日志,所以我也在current_logbook_id
表中放了一个user
,然后给了一个外键。但是,在我的BaseUserQuery.php
文件中,我获得了两个filterByLogbook()
函数。
我知道当你有两个外键到同一个表,来自同一个表时,你会得到像getUserRelatedBySomething()
和getUserRelatedBySomethingElse()
这样的函数,但是什么是最好的在这种情况下要做的事情?
我当然可以删除外键并只使用保存的ID,或者我想我可以创建一个新的联结表(虽然这似乎不正确)。在这种情况下,最好的做法是在MySQL 和 Propel中“做正确的事情”(希望我能够做到这两点!)
答案 0 :(得分:2)
在schema.xml
添加phpName and refPhpName attributes到用户表定义中的外键:
<table name="user" phpName="User">
...
<foreign-key foreignTable="logbook" phpName="CurrentLogBook" refPhpName="CurrentLogBookUser">
<reference local="current_logbook_id" foreign="id"/>
</foreign-key>
...
</table>
然后你应该得到filterByCurrentLogBook()
和filterByCurrentLogBookUser()
函数而不会发生碰撞。