2011-10-31 30 views
0

私はPHP-ActiveRecord ORMを使用してプライベートメッセージングシステムを開発しています。私は、 'ユーザー'と 'メッセージ'と呼ばれるモデル、 'ユーザー'と 'メッセージ'というMySQLテーブルを持っています。メッセージテーブルには、 'sender_id'と 'recipient_id'というフィールドがあります。しかし、Userモデルに送信者と受信者を適切に関連付ける方法がわかりません。ActiveRecord - 外部キーと異なる命名規則を関連付ける?

これは私がUserモデルで、これまで持っているものです。

static $has_many = array(
    array('messages'), 
    array('recipients', 'foreign_key' => 'recipient_id', 'class_name' => 'Message'), 
    array('senders', 'foreign_key' => 'sender_id', 'class_name' => 'Message'), 
); 

、これは私がメッセージモデルで、これまで持っているものである。しかし

static $belongs_to = array(
    array('sender', 'class_name' => 'User'), 
    array('recipient', 'class_name' => 'User'), 
); 

、私は、コードを実行したとき$ message-> recipient-> first_nameのように、私が望むようにUserモデルからファーストネームを正しく引き出すことはできません。私は何が間違っているのか分かりません。

通常、標準的な命名規則を使用しています。しかし、この例では、同じタイプのsender_idとrecipient_idを持っていなければならないので、標準の命名規則を使うことはできません。

ご協力いただければ幸いです。私はPHP-ActiveRecord ORMを使用しています。私はRailsのバージョンがより広く使われていると思いますが、異なる構文を除いて同じように動作することは私の理解です。

+0

心配...将来のために、あなたはしないでくださいあなたが聞いたすべての質問に答えることができます。あなたの質問に適切な解決策を提供するものだけです。 –

答えて

1

あなたはまた、(すなわちuser_id)それ以外の場合は、テーブルの名前から推測される、$のbelong_toで外部キーを指定する必要がありません:

static $belongs_to = array(
    array('sender', 'class_name' => 'User', 'foreign_key' => 'sender_id'), 
    array('recipient', 'class_name' => 'User', 'foreign_key' => 'recipient_id'), 
); 
関連する問題