【问题标题】:How to update flag, only if any field's of form is changed如何更新标志,仅当表单的任何字段更改时
【发布时间】:2015-08-11 17:18:01
【问题描述】:

如果表单的任何字段未更改,则将 flag 设置为 1,如果表单的任何字段更改,则将 flag 设置为 0。以下是视图:

<div class="row"> 
   <?php echo $form->labelEx($model,'name'); ?> 
   <?php echo $form->textField($model,'name'); ?> 
   <?php echo $form->error($model,'name'); ?> 
</div> 
<div class="row"> 
   <?php echo $form->labelEx($model,'email'); ?> 
   <?php echo $form->textField($model,'email'); ?> 
   <?php echo $form->error($model,'email'); ?> 
</div>

【问题讨论】:

  • 请提供您已经尝试过的任何代码
  • 请添加必要的代码/参考
  • @Ayush 更新您的问题。
  • 阐述你的问题
  • 我的问题是,如果我在创建时输入了几个文本字段但在更新时我没有更改/输入任何字段如何通过此更改列的状态,如果没有更改/输入字段然后设置标志列为 0,否则设置为 1。我想这次我的问题很清楚。

标签: php yii


【解决方案1】:

如果您使用的是 Y1.1

您可以在模型中执行此操作,方法是创建名为 beforeSave() 和 afterFind 的两个函数。 Yii 会在保存记录之前和找到记录之后自动调用。

您的策略是在找到记录时制作一份副本,并在更新它之前,检查当前值(来自表单)与以前的值。

class User extends CActiveRecord
{  
    public $oldRecord;

    public function afterFind()
    {
        $this->oldRecord=clone $this;
        return parent::afterFind();     
    }

    public function beforeSave()
    {
        if ($this->oldRecord->email !== $this->email) {
            $this->changed_record_flag = true;
        }    
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多