【问题标题】:Yii Make a model instance that cannot be savedYii 制作一个无法保存的模型实例
【发布时间】:2012-12-27 18:11:52
【问题描述】:

假设我有一个 Widget 表和与之配套的 Yii Model 类。

我希望能够实例化它 ($tempWidget = new Widget) 但以某种方式确保它不能保存到数据库中。我想使用模型仅供用户测试,模拟......

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

【问题讨论】:

  • 重新实现所有保存方法(save()、insert()、update(),可能还有其他方法)以在调用其父实现之前检查此标志的状态。

标签: php yii yii-cmodel


【解决方案1】:

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

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

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

【讨论】:

  • 您不必取消设置属性。简单地返回 false 就可以了。实际上,我相信不调用 parent::beforeSave() 就足够了。
  • 听起来很有趣。以及如何仅在我想要的时候触发它?例如new Widget('temp') 之类的东西?在正常情况下new Widget我当然希望它正常保存。
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
相关资源
最近更新 更多