Yii如何设置HAS_ONE关系,其中pk位于相关模型的两列之一?
我有一个PairModel 配对|第一个|项目| id |第二个|项目| id| 和项目模型 item_id |一些_公共_item_字段 成对的关系如下所示: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
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),它将不起作用。