Yii2 ActiveRecord渴望加载后获得新的关系

时间:2018-08-29 18:11:59

标签: yii2

我在Yii2中有一个项目,其中有两个一对一关系的模型。

两个模型分别是PlanSubscription,每个模型分别具有getSubscriptiongetPlan方法。

我渴望通过使用以下命令来加载其中的一大组

$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

1 个答案:

答案 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方法。