首页 > 文章列表 > PHP CI中如何实现每月重置用户的发奖次数?

PHP CI中如何实现每月重置用户的发奖次数?

348 2025-03-26

PHP CI中如何实现每月重置用户的发奖次数?

使用CodeIgniter框架实现每月重置用户奖励次数

本文介绍如何在CodeIgniter框架中实现每月重置用户奖励次数的功能。

数据库设计

首先,需要创建一个数据库表来存储每个用户的奖励次数信息:

CREATE TABLE `user_awards` (
    `user_id` INT NOT NULL,
    `month` DATE NOT NULL,
    `count` INT DEFAULT 0
);

模型 (User_awards_model.php)

创建一个模型来处理数据库操作:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class User_awards_model extends CI_Model {

    public function update_award_count($user_id) {
        $month = date('Y-m-01'); // 获取当前月的第一天
        $this->db->where('user_id', $user_id);
        $this->db->where('month', $month);
        $this->db->set('count', 'count + 1', FALSE);
        $this->db->update('user_awards');

        if ($this->db->affected_rows() == 0) {
            // 如果记录不存在,则插入新记录
            $data = array(
                'user_id' => $user_id,
                'month' => $month,
                'count' => 1
            );
            $this->db->insert('user_awards', $data);
        }
    }

    public function reset_award_count() {
        $lastMonth = date('Y-m-01', strtotime('-1 month'));
        $this->db->where('month', $lastMonth);
        $this->db->delete('user_awards');
    }
}

控制器 (Cron_controller.php)

创建一个控制器来处理每月重置任务:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Cron extends CI_Controller {

    public function reset_awards() {
        $this->load->model('User_awards_model');
        $this->User_awards_model->reset_award_count();
    }
}

定时任务设置 (Cron Job)

使用系统自带的crontab工具设置每月1号凌晨执行重置任务。 具体的命令取决于你的服务器环境,但大致如下:

0 0 1 * * php /path/to/your/index.php cron/reset_awards > /dev/null 2>&1

请将/path/to/your/index.php替换为你的CodeIgniter项目的index.php文件的实际路径。 > /dev/null 2>&1 将输出重定向到空设备,防止cron任务的输出干扰系统日志。

控制器中更新奖励次数

在你的应用控制器中,调用模型方法来更新奖励次数:

$this->load->model('User_awards_model');
$user_id = $this->session->userdata('user_id'); // 获取用户ID
$this->User_awards_model->update_award_count($user_id);

注意事项

  • 确保你的服务器已正确配置crontab服务。
  • /path/to/your/index.php 必须指向你的CodeIgniter应用的index.php文件。
  • 考虑使用更健壮的错误处理机制,例如记录日志。
  • 确保你的服务器时区设置正确。

此方案提供了一个更完整、更结构化的解决方案,并更清晰地分离了模型和控制器,提高了代码的可维护性。 记住根据你的实际情况调整代码和crontab命令。

来源:1740347351