如何在codeigniter中的不同时间戳中为表中的每个用户执行更新?

时间:2015-08-24 06:24:02

标签: php codeigniter cron

对于CRM系统在Codeigniter中我有一个管理模块,可以将余额添加到重新销售。现在,经销商可以选择查看自己的用户,他可以添加以删除余额。现在,如果在编辑时有一个单选按钮,那么余额是是或否。我知道逻辑但不知道如何实现以下内容:一个经销商编辑用户并将余额设置为是我想要计算30天30天后,余额将重置为否。所以我想我应该获取所有用户并检查他们的余额是否设置为是。如果它已经30天,那么我有一个更新的cron作业文件,它会将余额重置为否。现在我不知道该怎么做?我怎么能检查每个用户?我对代码和逻辑非常困惑。以下是我编辑用户的代码。

public function edit ($id = NULL)
{

     $usertype=$this->session->userdata('usertype');
    if($usertype ==="reseller")
    {

    // Fetch a user or set a new one
    if ($id) {
        $this->data['user'] = $this->user_m->get($id);
        count($this->data['user']) || $this->data['errors'][] = 'User could not be found';
    }
    else {
        $this->data['user'] = $this->user_m->get_new();
    }

    // Set up the form
    $rules = $this->user_m->rules_admin;
    $id || $rules['password']['rules'] .= '|required';
    $this->form_validation->set_rules($rules);

    // Process the form
    if ($this->form_validation->run() == TRUE) {
        $data = $this->user_m->array_from_post(array('sip_id','sip_pass','name','email', 'password','phone','status','created','balance'));
        $data['password'] = $this->user_m->hash($data['password']);
        $this->user_m->save($data, $id);
        redirect('reseller/user');
    }

    // Load the view
    $this->data['subview'] = 'reseller/user/edit';
    $this->load->view('reseller/_layout_main', $this->data);


}
else{
    $this->load->view('permission');
}

}

转销商: reseller

用户表:

User Table

1 个答案:

答案 0 :(得分:1)

数据库的触发示例(MySQL):

CREATE TRIGGER resetBalance
    BEFORE UPDATE ON your_table_name
    IF new.balance = "yes" THEN 
    SET NEW.reset = ADDDATE(curdate(), INTERVAL 30 DAY);
    End IF

<强>更新

假设您在数据库中有一个名为balance的字段,您可以在其中存储值yes或no。 (我更喜欢这里的布尔类型。)

让我们说,您有一个名为reset的字段,您可以在其中保存余额的重置日期。重置字段应该是日期时间。

如果您对任何余额字段进行更新并且余额字段的«新»条目为是,则数据库将在重置字段中插入当前日期+ 30天。

New表示您在db中保存的新条目,还有一个旧值。这是在列中更新之前的值。

就是这样。

在你的cron中,你只需要检查重置字段,做一些逻辑或什么,然后删除重置字段中的值。

更新2:

我刚刚看到,您的数据库中有一个已创建和已修改的字段。这也是使用触发器的最佳方式。

插入前:

set new.created = NOW();

更新前:

set new.modified = NOW();

更新3:

今天是触发日; - ))

假设你有一个tblUsers和一个tblResellers。在tblResellers中,您希望根据tblUsers中的balance字段设置重置日期。然后你应该在tblResellers中创建一个Trigger,如下所示:

BEGIN
set @userBalance = (SELECT balance FROM tblUsers WHERE id = old.userid);

IF @userBalance = "yes" THEN 
    SET NEW.reset = ADDDATE(curdate(), INTERVAL 30 DAY);
    ELSE
    SET NEW.reset = "";
    END IF;
END

在第二行中,我定义了一个变量«userBalance»,它从tblUsers获取其值。在where子句中,我使用来自tblResellers(userid)的字段,该字段与tblUsers中的ID相对应。

上面的行很简单:检查userBalance的值,做出一些决定并设置重置日期。

我认为这个触发器不会满足您的所有需求,但您会感觉如何做到这一点。如果您更改代码,请逐步进行,调试触发器有点棘手。