Yii2 ActiveRecord在快速加载后获得新关系

Yii2 ActiveRecord在快速加载后获得新关系,yii2,Yii2,我在Yii2有一个项目,我有两个一对一的模型 这两个模型分别是Plan和Subscription,分别有getSubscription和getPlan方法 我渴望通过使用以下工具加载一大群: $plans = Plan::find()->with('subscription')->all(); 但是,我正在修改一些计划ssubscription\u id: $plan->subscription_id = 5; $plan->save(); 问题是现在$plan->s

我在Yii2有一个项目,我有两个一对一的模型

这两个模型分别是
Plan
Subscription
,分别有
getSubscription
getPlan
方法

我渴望通过使用以下工具加载一大群:

$plans = Plan::find()->with('subscription')->all();
但是,我正在修改一些
计划
s
subscription\u id

$plan->subscription_id = 5;
$plan->save();
问题是现在
$plan->subscription
包含原始
订阅
,而不是带有新id的
订阅


有没有办法让Yi2仅在id更新后(而不是延迟加载所有
订阅
之后)才能获取新的
订阅

如果我没有误解,您可以这样做

<?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
,您的
计划
关联的
订阅将被改装

您还可以重写
afterSave
方法,而不是将其实现为事件处理程序


如何修改它?将该代码共享为well@AzraarAzward只需$plan->subscription\u id=5;然后$plan->save();我将更新我的问题。您正在使用哪个版本的Yii。这些关系是如何定义的?