2016-04-01 14 views
1

私は単純なはずですが、PHP ActiveRecordでは不可能な何かを達成しようとしています。PHP ActiveRecordのModelインスタンスとして属性値を取得する方法は?

私が作成した簡単な例では、PersonとExchangeという2つのモデルと、people(id, name)exchange(id, user_from_id, user_to_id, comment)という2つのモデルがあります。 exchange.user_from_idおよびexchange.user_to_idには、people.idを参照する外部キー制約があります。

$exchange = Exchange::first(); 
echo $exchange->user_from_id; 
echo $exchange->user_from_id->name; 

私が最初echoは失敗を期待する2つ目は、成功するために:

は、だから私は、次のコードを実行したとき。代わりに、最初のものが成功し、exchange.user_from_idという文字の値を出力し、明らかに2番目のものは「非オブジェクトのプロパティを取得しようとしています」という警告を生成します。

結果は同じでもExchangeに以下を追加することなく、次のとおりです。

static $belongs_to = array(
    array('user_from_id', 'class_name' => 'Person'), 
    array('user_to_id', 'class_name' => 'Person') 
); 

私は$exchange->user_from_idは、Personクラスのインスタンスを返すようにそれを作るために私のコードで何を変更する必要がありますか?

答えて

1

私はBelongsToがどのように動作しているのか誤解していました。私はそれが何らかの形で属性に対応するModelのプロパティを別のModelにバインドすると考えましたが、今度は新しいプロパティを作成し、foreign_keyオプションを使用して明示的に関連付けなければなりません。

static $belongs_to = array(
    array('user_from', 
      'class_name' => 'Person', 
      'foreign_key' => 'user_from_id'), 
    array('user_to', 
      'class_name' => 'Person', 
      'foreign_key' => 'user_to_id') 
); 

を次に、このコードを使用して::私は最終的に私が期待したものだ

$exchange = Exchange::first(); 
echo $exchange->user_from; 
echo $exchange->user_from->name; 

:最初の致命的なエラーを

具体的には、これは私がExchangeに追加する必要がありましたものですechoであり、第2の印刷はpeople.namepeople.id = exchange.user_from_idである。

$exchange = Exchange::first(array('include' => array('user_from', 'user_to'))); 

また、これは2つのpeopleオブジェクトの積極的なロードを使用することが可能になりました

関連する問題