我在Yii2中有一个项目,其中有两个一对一关系的模型。
两个模型分别是Plan
和Subscription
,每个模型分别具有getSubscription
和getPlan
方法。
我渴望通过使用以下命令来加载其中的一大组
:$plans = Plan::find()->with('subscription')->all();
但是,我正在使用以下方式修改Plan
的某些subscription_id
:
$plan->subscription_id = 5;
$plan->save();
问题在于,现在$plan->subscription
包含原始Subscription
,而不是包含具有新ID的Subscription
。
有没有一种方法可以让Yii2仅在ID更新之后(而不是延迟加载所有Subscription
s)来获取新的Subscription
?
答案 0 :(得分:1)
如果我没有误会,您可以这样做
<?php
use yii\db\ActiveRecord;
class Plan extends ActiveRecord
{
public function init()
{
$this->on(self::EVENT_AFTER_UPDATE, [$this, 'afterUpdateHandler']);
}
/**
* @param \yii\db\AfterSaveEvent $event
*/
public function afterUpdateHandler($event)
{
if (isset($event->changedAttributes['subscription_id']))
{
$this->subscription = NULL;
}
}
// ...
}
?>
下次,您致电$plan->subscription
,您的subscription
所关联的Plan
将会被改装。
除了将其实现为事件处理程序之外,您还可以重写
afterSave
方法。