username
両方にフィールドを持つ2つのテーブルがあります。ローカル テーブルと外部テーブルの両方にフィールド名を指定するにはどうすればよいですか?
私はCakePHPが次のようなことをしたい
ON (`T1`.`username` = `T2`.`username`)`
結果として。変更がなければ、テーブルは次の条件で結合されます。
ON (`T1`.`id` = `T2`.`t1_id`)`
次のようなクエリが生成されるため、プロパティを設定'foreign_key' = 'username'
するだけでは不十分です。
ON (`t1`.`id` = `t2`.`username`)`
私には2つの解決策があります。最初の 1 つは、'join' プロパティを使用して、その場でテーブルを結合することです。そのような場合、ローカル フィールドと外部フィールドの両方を設定できます。しかし、手動で結合したそのテーブルにさらにテーブルを結合する必要がある場合、contains を使用できなくなり、その関連付けが正しく設定されていても、次の結合を手動で記述する必要があります。そのため、毎回使用する代わりに長い結合定義を記述する必要があります'contain' => array('T1', 'T2', 'T3')
2 つ目は、テーブルの「primary_key」を対応するフィールドに設定することです。モデルファイルまたはランタイムで実行できます。私の場合、そのテーブルにもその'id'
フィールドによる「正しい」関連付けがあるため、モデルでは実行できません。ランタイムをセットアップするのは事実ですが、明らかではなく、ハックのように見えるので嫌いです。
私がこの質問をするとき、私は明らかな何かが欠けていると思っていましたが、今ではCakePHPがそれを行うことができないことを理解しています. だから私は誰かが解決策を共有することを期待して賞金を始めました. そうでない場合は、ケーキのソースを読み取り、モデルの一部を再定義して'foreign_key'
、関連定義の近くにローカル フィールドを定義する機能を追加しようとします。