0

我的一张表中有两行,如下所示:

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

在查看该行的模型时,id 1我希望根据product_id和 的target_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 回答