Yii2:ActiveRecord如何卸载/取消设置所有(某些)属性的模型?

Yii2:ActiveRecord如何卸载/取消设置所有(某些)属性的模型?,activerecord,yii,yii2,Activerecord,Yii,Yii2,yii2activerecord有一种方法可以自动将表单数据加载到模型中,使用这种方法非常好,因为它可以安全地加载模型中的数据,但是我找不到一种等效的方法来卸载所有属性的模型 i、 是否有一种方法可以像yii1.x中的方法一样,取消设置Yii2中模型的所有属性 目前唯一的办法似乎是 $model->setAttributes(['attribute1'=>NULL,'attribute2' => NULL ... ]); 或 编辑:为了澄清这一点,虽然此时我只想通过重新初始化

yii2activerecord有一种方法可以自动将表单数据加载到模型中,使用这种方法非常好,因为它可以安全地加载模型中的数据,但是我找不到一种等效的方法来卸载所有属性的模型

i、 是否有一种方法可以像yii1.x中的方法一样,取消设置Yii2中模型的所有属性

目前唯一的办法似乎是

$model->setAttributes(['attribute1'=>NULL,'attribute2' => NULL ... ]);


编辑:为了澄清这一点,虽然此时我只想通过重新初始化模型来取消设置所有属性,但我还想控制重置哪些属性,只要创建模型的新实例即可

$model = new MyModel;
或者如您所见,是这样的,您可以简单地在基本模型中实现它:

public function unsetAttributes($names=null)
{
    if($names===null)
        $names=$this->attributeNames();
    foreach($names as $name)
        $this->$name=null;
}

当然,但我更喜欢控制卸载的内容,unSetAttributes提供了此控制,如果愿意,您可以指定要取消设置的属性。是否有任何原因不再支持此功能?这就是我通过扩展ActiveRecord所做的。如果您使用新的MyModel,则模型将填充默认属性,我猜这与完全重置属性不同。根据源repo上的每个问题#4596(),这并没有被实现,因为AR模型在默认情况下不再加载值,如果您仍然像我一样需要它,Samuel Liew的答案就是一种方法。
public function unsetAttributes($names=null)
{
    if($names===null)
        $names=$this->attributeNames();
    foreach($names as $name)
        $this->$name=null;
}