>我有一个配对模型
pair_id | first_item_id | second_item_id |
和项目模型
item_id | some_common_item_fields
对的关系是这样的:
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 不是解决方案(因为我需要在作用域等中使用相关对)
我认为关系应该是这样的:
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()
);
}
只是普通的Yii声明。