Php Yii生成无法保存的模型实例

Php Yii生成无法保存的模型实例,php,yii,yii-cmodel,Php,Yii,Yii Cmodel,假设我有一个小部件表和它附带的Yii模型类 我希望能够实例化它($tempWidget=newwidget),但要确保它不能保存到数据库中。我想使用这个模型只是为了让用户测试,模拟 显然,我可以避免调用$tempWidget->save(),但我希望使用某种标志阻止save保存,以防代码的其他部分尝试这样做。有几种方法可以实现您想要的功能。最简单的方法是修改模型beforeSave()方法,通过使用CModel unsetAttributes方法取消设置所有属性,以防止模型能够保存,例如: pu

假设我有一个
小部件
表和它附带的Yii模型类

我希望能够实例化它(
$tempWidget=newwidget
),但要确保它不能保存到数据库中。我想使用这个模型只是为了让用户测试,模拟


显然,我可以避免调用
$tempWidget->save()
,但我希望使用某种标志阻止save保存,以防代码的其他部分尝试这样做。

有几种方法可以实现您想要的功能。最简单的方法是修改模型
beforeSave()
方法,通过使用
CModel unsetAttributes
方法取消设置所有属性,以防止模型能够保存,例如:

public function beforeSave(){
    $this->attributes = $this->unsetAttributes();
}

只有当与此模型关联的规则具有必填字段(至少一个必填字段)时,这才有效,否则这将在表中创建一个仅包含主键的条目(假设PK是自动递增的)。

重新执行所有保存方法(
save()
insert()
update()
,可能是其他)在调用其父实现之前检查此标志的状态。您不必取消设置属性。简单地返回false就可以了。实际上,我认为不调用parent::beforeSave()就足够了。听起来很有趣。我怎样才能在我想要的时候触发它呢?例如,类似于
newwidget('temp')
?在正常情况下,
newwidget
我当然希望它像正常情况一样保存。