检查复选框是否曾经有值 1

Check if checkbox ever had value 1

我有一个复选框,只有第一次点击才会触发操作,这一点很重要。在另一个函数中,

if($checkboxModel->value==1 && $checkboxModel->oldAttributes['value']==0)

被调用。

有什么方法可以测试以前是否单击过该复选框?据我了解,oldAttributes 只是当前值之前的最新值,对吗?

oldAttributes 属性 用于存储从数据库加载的属性值或存储在数据库中的最后一个值。

假设您在数据库中有这样的记录:

id | value
----------
1  |  0   

那么 oldAttributes 属性 将像这样工作:

$model = MyModel::findOne(1);
echo $model->value; //output 0
echo $model->oldAttributes['value']; //output 0

$model->value = 1;
echo $model->value; //output 1
echo $model->oldAttributes['value']; //output 0

$model->value = 2;
echo $model->value; //output 2
echo $model->oldAttributes['value']; //output 0

$model->save();
echo $model->value; //output 2
echo $model->oldAttributes['value']; //output 2

$model->value = 1;
echo $model->value; //output 1
echo $model->oldAttributes['value']; //output 2

oldAttributes 属性 不记得记录在某些不同请求中的值。

如果您想确定该操作是否已经执行,您需要向存储该信息的数据库添加一些额外的字段。执行操作时,您将更改该额外字段的值。当复选框状态更改时,您将检查额外属性以查看操作是否已经执行或应该立即执行。

数据库 table 可能如下所示:

id | value | action_executed
----------------------------
1  |   0   |       0

并检查您的代码:

if(
    $checkboxModel->value==1 
    && $checkboxModel->oldAttributes['value']==0
    && $checkboxModel->action_executed == 0
) {
    // ... execute action
    // update action_executed field
    $checkboxModel->action_executed = 1;
    $checkboxModel->save(false, ['action_executed']);
   //false to turn of validation and the second param to save only that attribute
}