这个推进“无法重新声明功能”错误的最正确方法是什么?

时间:2012-09-05 08:19:21

标签: mysql propel redeclare

我有以下表格:

userlogbookuser_logbook

用户日志是一个联结表(schema.xml中的isCrossRef="true"),包含user_idlogbook_id个外键。

我还想记住任何给定用户当前选择的日志,所以我也在current_logbook_id表中放了一个user,然后给了一个外键。但是,在我的BaseUserQuery.php文件中,我获得了两个filterByLogbook()函数。

我知道当你有两个外键到同一个表,来自同一个表时,你会得到像getUserRelatedBySomething()getUserRelatedBySomethingElse()这样的函数,但是什么是最好的在这种情况下要做的事情?

我当然可以删除外键并只使用保存的ID,或者我想我可以创建一个新的联结表(虽然这似乎不正确)。在这种情况下,最好的做法是在MySQL Propel中“做正确的事情”(希望我能够做到这两点!)

1 个答案:

答案 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()函数而不会发生碰撞。