Activerecord 在Yii2中创建/更新子关系模型时创建/更新父关系

Activerecord 在Yii2中创建/更新子关系模型时创建/更新父关系,activerecord,yii2,relationship,updatemodel,Activerecord,Yii2,Relationship,Updatemodel,我有一个用户模型(名称、用户名、密码等)和一个客户模型,该模型与用户模型的关系为1:1,该模型用于存储(名字、姓氏、电子邮件等) 我想让客户通过注册过程创建他们的帐户,要求他们提供(名字、姓氏、电子邮件、密码等) 因此,很明显,注册过程必须首先创建一个用户帐户(使用,名字和姓氏作为名称,电子邮件作为用户名,密码)。然后可以创建客户帐户 尽管如此,如果客户以后想更改其姓名,我们必须更新用户帐户中的字段名 在Yii2中实现这一目标的最佳方法是什么?? 我试图在Customer AR上重写before

我有一个用户模型(名称、用户名、密码等)和一个客户模型,该模型与用户模型的关系为1:1,该模型用于存储(名字、姓氏、电子邮件等)

我想让客户通过注册过程创建他们的帐户,要求他们提供(名字、姓氏、电子邮件、密码等)

因此,很明显,注册过程必须首先创建一个用户帐户(使用,名字和姓氏作为名称,电子邮件作为用户名,密码)。然后可以创建客户帐户

尽管如此,如果客户以后想更改其姓名,我们必须更新用户帐户中的字段名

在Yii2中实现这一目标的最佳方法是什么??

我试图在Customer AR上重写beforeSave(),但我面临的问题是如何在尚未创建相关用户时使用相关用户填充属性

所以问题是:在创建新客户帐户时,我们如何创建用户帐户?以及,更新客户帐户时如何更新相关用户帐户?


谢谢大家。

您只需在客户控制器中对创建和更新操作进行适当的更改,即可管理此操作

例如,对于actionCreate:

public function actionCreate()
    {
        $modelCustomer = new Customer();
        modelUser = new User(); 


        if ($modelCustomer->load(Yii::$app->request->post()) && $modelCustomer->save()) {
            modelUser->name = $modelCustomer->name; 
            .........
            $modelUser
            return $this->redirect(['index']);
        } else {
            return $this->render('create', [
                'model' => $modelCustomer,
            ]);
        }
    }

谢谢你的快速重播。但是有没有一种方法可以从客户模型中实现呢?这将有助于避免重复该过程。假设客户可以注册自己,管理员可以创建/更新客户帐户。在这种情况下,我们必须维护关系两次。另一个问题是,我不能在保存用户模型之前保存客户模型,因为客户表继承自用户表。因此,我需要在DB中插入一个用户记录并获取id,然后我可以插入客户记录。