Yii如何设置HAS_ONE关系,其中pk位于相关模型的两列之一?

Yii如何设置HAS_ONE关系,其中pk位于相关模型的两列之一?,yii,multiple-columns,has-one,database-relations,Yii,Multiple Columns,Has One,Database Relations,我有一个PairModel 配对|第一个|项目| id |第二个|项目| id| 和项目模型 item_id |一些_公共_item_字段 成对的关系如下所示: public function relations() { return array( 'relatedFirstItem' => array(self::BELONGS_TO, 'Cash', 'debit_cash_id'), 'relatedSecondItem' => array(s

我有一个PairModel

配对|第一个|项目| id |第二个|项目| id|

和项目模型

item_id |一些_公共_item_字段

成对的关系如下所示:

public function relations()
{
   return array(
       'relatedFirstItem' => array(self::BELONGS_TO, 'Cash', 'debit_cash_id'),
       'relatedSecondItem' => array(self::BELONGS_TO, 'Cash', 'credit_cash_id'),
   );
}
但是如何设置从项到项对的关系

public function relations()
{
   return array(
       'relatedPair' => array(self::HAS_ONE, 'PairModel', '???'),
   );
}
Getter不是解决方案(因为我需要在作用域等中使用relatedPair)

我认为这种关系应该是这样的:

public function relations()
{
   return array(
       'relatedPair' => array(self::HAS_ONE, 'PairModel', '', 'on'=>'(first_item_id=:itemPkAlias or second_item_id=:itemPkAlias)'),
   );
}
但看起来itemPkAlias是通过友好方式提供的,我无法预先设置或获取它。

在我的1个模型中

return array_merge(
    array(
            'billingAddress' => array(self::BELONGS_TO, 'Address', 'BillingAddress_id'),
            'shippingAddress' => array(self::BELONGS_TO, 'Address', 'ShippingAddress_id'),
        ),
    parent::relations()
);      
/**
 * @return array relational rules.
 */
public function relations()
{

    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array_merge(
        array(
            'orders_billing' => array(self::HAS_MANY, 'Order', 'BillingAddress_id'),
            'orders_shipping' => array(self::HAS_MANY, 'Order', 'ShippingAddress_id'),
            ),
        parent::relations()
    );      
}
我有另一种型号

return array_merge(
    array(
            'billingAddress' => array(self::BELONGS_TO, 'Address', 'BillingAddress_id'),
            'shippingAddress' => array(self::BELONGS_TO, 'Address', 'ShippingAddress_id'),
        ),
    parent::relations()
);      
/**
 * @return array relational rules.
 */
public function relations()
{

    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array_merge(
        array(
            'orders_billing' => array(self::HAS_MANY, 'Order', 'BillingAddress_id'),
            'orders_shipping' => array(self::HAS_MANY, 'Order', 'ShippingAddress_id'),
            ),
        parent::relations()
    );      
}

正常的Yii声明。

这里有两个关系,但在我的例子中,我们只需要一个统一的关系-这就是情况所在。我需要有一个地方可以得到父对,不管我是第一个项目还是第二个,$item->relatedParentPair应该返回我的对我得到的最接近的是'any'=>array(self::HAS_MANY,'Order',array('BillingAddress_id','ShippingAddress_id'),但它使用并且不使用或。您可以创建一个getter,类似于函数getrelatedParentPair(){return Order::model()->find(condition)},它在某些情况下会像关系一样工作(这意味着您可以使用foreach($model->relatedParentPair…),但如果使用一些高级扩展(如SaveWithRelated),它将不起作用。