使用活动模型变量的Yii关系


Yii relations using variables of the active model

我的其中一个表中有两行如下:

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

当查看具有id 1的行的模型时,我希望根据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;
}

效果很好

您没有指定外键(代码中的'')。试试这样做:

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

更多信息请参阅此处和此处的手册