0

テーブルの 1 つに次のような 2 つの行があります。

id  product_id  target_product_id   description                    type
1   206587          456                     sdfgdfgdfg                  0
2   456             206587                  fgdgfhghfgfdsgfdghfghfsd    0 

行のモデルを表示するときに、とが反転しているid 1場所に基づいて 2 番目の行を取得したいと考えています。だから私は次の関係を作りました:product_idtarget_product_id

'linked_product_relation' => array(self::HAS_ONE, 'Accessory', '',
    'on'=>'linked_product_relation.target_product_id = product_id 
        AND link_product_relation.product_id = target_product_id')

ただし、 のみが返されるようnullです。テーブルへのリンクを確認しlink_product_relationましたが、SQL エラーは発生せず、単にnull戻ります。との関係のみを使用すると、link_product_relation.product_id = product_id実際には応答が得られますが、現在見ている行のみです。何かが足りないようです。

どうすれば目的の出力を得ることができますか?

編集

リレーションを置き換える関数を追加すると、次のようになります。

function getTwinned(){

    $a=Accessory::model()->findByAttributes(array('target_product_id'=>$this->product_id, 'product_id'=>$this->target_product_id));
    if($a===null)
        return null;
    else
        return $a;

}

それは完全に機能します。

4

1 に答える 1

0

外部キーを指定していません (''コード内)。次のようなことを試してください:

'linked' => array(self::BELONGS_TO, 'Accessory', array(
    'target_product_id'=>'product_id',
    'product_id' => 'target_product_id',
)),

詳細については、このトピックに関するマニュアルをこちらこちらでお読みください。

于 2013-05-23T16:09:11.667 に答える