如何在 Yii 中比较两个日期和更新模型数据
How to compare two dates & update model data in Yii
我有一个名为 BloodRequest 的模型。当在此模型中创建任何新记录时,记录的状态定义为 "active"。现在,我正在尝试在 Yii 1.1 中制作一个控制器,它将检查 "required_on" 中保存的日期是否超过两个月。如果超过两个月,状态将更新为 "inactive"。
问题:我制作了控制器并更新了状态。但它会将所有状态更新为非活动状态,而不是更新超过两个月的记录。我一直试图找出问题出在哪里,但找不到。正如我所见,一切都很好。控制器的动作代码如下:
public function actionRequest() {
//save all the record in an array
$model = BloodRequest::model()->findAll();
foreach ($model as $key) {
$id = $key['id'];
$date = date("YYYY-MM-DD", strtotime($key['required_on']));
//check the date and update status
if (strtotime('-60 days') > strtotime($date)) {
$found = BloodRequest::model()->findByPk($id);
$found->status = "active";
if($found->validate())
{
$found->save();
}
}
}
$this->render('request');
}
}
首先要考虑的是代码不能一直执行,因为内存限制。事实上,当您调用 BloodRequest::model()->findAll()
时,这可能需要太多内存(可能有数千行...)。
所以我认为如果您不需要在更新行之前或之后执行特定任务(覆盖 ActiveRecord class 的 beforeSave 和 afterSave),您可以直接使用 sql 来解决任务,如:
$sql = 'UPDATE BloodRequest SET status = "inactive" WHERE DATEDIFF(CURRENT_DATE, required_on) > 60';
\Yii::$app->db->createCommand($sql)->execute();
我有一个名为 BloodRequest 的模型。当在此模型中创建任何新记录时,记录的状态定义为 "active"。现在,我正在尝试在 Yii 1.1 中制作一个控制器,它将检查 "required_on" 中保存的日期是否超过两个月。如果超过两个月,状态将更新为 "inactive"。
问题:我制作了控制器并更新了状态。但它会将所有状态更新为非活动状态,而不是更新超过两个月的记录。我一直试图找出问题出在哪里,但找不到。正如我所见,一切都很好。控制器的动作代码如下:
public function actionRequest() {
//save all the record in an array
$model = BloodRequest::model()->findAll();
foreach ($model as $key) {
$id = $key['id'];
$date = date("YYYY-MM-DD", strtotime($key['required_on']));
//check the date and update status
if (strtotime('-60 days') > strtotime($date)) {
$found = BloodRequest::model()->findByPk($id);
$found->status = "active";
if($found->validate())
{
$found->save();
}
}
}
$this->render('request');
}
}
首先要考虑的是代码不能一直执行,因为内存限制。事实上,当您调用 BloodRequest::model()->findAll()
时,这可能需要太多内存(可能有数千行...)。
所以我认为如果您不需要在更新行之前或之后执行特定任务(覆盖 ActiveRecord class 的 beforeSave 和 afterSave),您可以直接使用 sql 来解决任务,如:
$sql = 'UPDATE BloodRequest SET status = "inactive" WHERE DATEDIFF(CURRENT_DATE, required_on) > 60';
\Yii::$app->db->createCommand($sql)->execute();