对于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');
}
}
用户表:
答案 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的值,做出一些决定并设置重置日期。
我认为这个触发器不会满足您的所有需求,但您会感觉如何做到这一点。如果您更改代码,请逐步进行,调试触发器有点棘手。