5

私は次のテーブルを持っています:

user、、logbook_user_logbook

ユーザーログブックは、外部キーを含むジャンクションテーブル(isCrossRef="true"schema.xml内)です。user_idlogbook_id

また、特定のユーザーに対して現在選択されているログブックを記憶したかったのでcurrent_logbook_iduserテーブルにもを入れて、その外部キーを与えました。ただし、私のBaseUserQuery.phpファイルには2つのfilterByLogbook()関数があります。

同じテーブルに対して、同じテーブルから2つの外部キーがある場合、とgetUserRelatedBySomething()のような関数を取得することは知っていますgetUserRelatedBySomethingElse()が、この状況で行うのに最適なことは何ですか?

もちろん、外部キーを削除して保存されたIDを使用することも、新しいジャンクションテーブルを作成することもできます(正しくないようですが)。MySQLとPropelで「正しいことをする」という観点から、この状況で行うのに最適なことは何ですか(うまくいけば、両方を行うことができます!)。

4

1 に答える 1

2

ユーザーテーブル定義の外部キーにphpName属性とrefPhpName属性schema.xmlを追加します。

  <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()衝突がないようにする必要があります。

于 2012-09-05T12:24:33.627 に答える