如何比较两个日期&更新Yii中的模型数据

时间:2016-04-29 16:52:41

标签: php datetime activerecord yii strtotime

我有一个名为BloodRequest的模型。当在此模型中创建任何新记录时,记录的状态定义为"活动"。现在,我正在尝试在Yii 1.1中创建一个控制器,它将检查日期是否保存在" required_on"超过两个月。如果它超过两个月,状态将更新为"不活动"。

问题:我制作了控制器并更新了状态。但它会将所有状态更新为非活动状态,而不是更新超过两个月的记录。我一直试图找到问题所在,但无法解决。我能看到一切都很好。控制器动作的代码如下:

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');
}
}

1 个答案:

答案 0 :(得分:1)

首先要考虑的是代码无法始终执行,因为内存限制。实际上,当你调用BloodRequest::model()->findAll()时,这可能需要太多内存(可能有数千行......)。

所以我认为如果你不需要在更新行之前或之后执行特定任务(覆盖ActiveRecord类的beforeSave和afterSave),你可以使用直接sql解决任务,例如:

$sql = 'UPDATE BloodRequest SET status = "inactive" WHERE DATEDIFF(CURRENT_DATE, required_on) > 60';
\Yii::$app->db->createCommand($sql)->execute();