2

「Product」というクラスと「Image」というクラスがあるプロジェクトに取り組んでいます。各商品には「前面」画像と「背面」画像の2種類の画像があるため、2つのフィールドを定義しました。1つはimage_front_idと呼ばれ、もう1つはimage_back_idと呼ばれます。

BaseProduct :: setUp()メソッドで、正面画像の関係を次のように定義しました。

$this->hasOne( 'Image', array ('local' => 'image_front_id', 'foreign' => 'id' ) );

さて、明らかに、クラス「Image」に別の「hasOne」を定義すると、ローカルフィールド名が「image_back_id」になりますが、これは正しく機能しません。だから私の質問は、同じクラスに対して複数の「1対1」の関係をどのように定義できるかということです。しばらく探していましたが、見つからないようです。

4

4 に答える 4

2

正解は_

$this->hasOne('Image as FrontImage', array('local' => 'image_front_id', 'foreign' => 'id'));
$this->hasOne('Image as BackImage', array('local' => 'image_back_id', 'foreign' => 'id'));
于 2009-12-13T05:05:04.380 に答える
1

Zedの答えは、関連付けようとしている2つの異なるテーブルがある場合に機能しますが、両方のフィールドを同じテーブルに関連付けようとしているようです。アーサー・フランケルのソリューションがうまくいくはずです。同じ名前で複数のリレーションシップを持つことはできないため、エイリアスを使用して、同じ Image テーブルに対して 2 つの異なるリレーションシップを取得する必要があります。'Image as FrontImage' と 'Image as BackImage' を宣言することで、それぞれの関係に独自のエイリアスがあります。

于 2009-11-18T21:24:16.987 に答える
0

解決策は次のとおりだと思います(「as」キーワードを使用):

$this->hasOne('Image as FrontImage', array('local' => 'image_front_id', 'foreign' => 'id', refClass => 'Image' ));
$this->hasOne('Image as BackImage', array('local' => 'image_back_id', 'foreign' => 'id', refClass => 'Image' ));
于 2009-11-16T19:46:16.397 に答える
0

私の記憶が正しければ、最初のパラメーターは参照の名前であり、参照されるクラスは refClass プロパティによって指定されます。

$this->hasOne('FrontImage', array('local' => 'image_front_id', 'foreign' => 'id', refClass => 'Image' ));
$this->hasOne('BackImage', array('local' => 'image_back_id', 'foreign' => 'id', refClass => 'Image' ));
于 2009-11-16T19:40:35.847 に答える