如何在 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();