检查复选框是否曾经有值 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
}
我有一个复选框,只有第一次点击才会触发操作,这一点很重要。在另一个函数中,
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
}