我正在使用Codeigniter
+ MySQL
+ Active Record
构建项目。
在我的MySQL
数据库中,我有一个名为请求的表,列协议,年以及我存储的其他一些列请求的一般信息(如标题,主题等......),没什么特别值得一提的。
协议和年份为TYPE INT
,必须自动生成,如下所示。
每年01/01/XXXX-00:00:00
protocol
字段必须重置为数字1(01/01/XXXX
之后保存的第一个请求必须具有协议值1),并且对于即将到来的请求,请增加它顺序为1,直到明年等。
要重置协议,我将在稍后的阶段添加一个cron,我将做一个技巧来重置。还是不知道怎么做。
我现在需要做什么:
每当我添加新的request
时,新行的protocol
必须增加1。
伪代码:
new_protocol = previous_protocol + 1
到目前为止我在做什么
我的模型中有一个插入新请求的函数,但到目前为止我对协议编号一无所知,我通过表单手动输入。
public function addRequest($request) {
$this->db->insert('requests', $request);
if ($this->db->affected_rows() == 1)
return $this->db->insert_id();
return FALSE;
}
实现这一目标的最有效方法是什么?
protocol
号码 - >添加1 - >插入db?任何想法都将受到赞赏。
答案 0 :(得分:0)
我接近这样:
date_default_timezone_set('UTC');
$cyear=date("Y");
max(ID)
并比较存储的年份是否与$cyear
如果它已更改并遵循您的伪代码示例:
new_protocol = 1
,否则
new_protocol = previous_protocol + 1
答案 1 :(得分:0)
好的,所以我在Codeigniter中创建了一个library
并编写了2个函数,1个在Library中,1个在Model中。
库
public function getProtocolNumber() {
$CI = &get_instance();
$year = date('Y');
$max_protocol = $CI->request_model->getYearsProtocol($year);
$max_protocol = $max_protocol['max_protocol_number'];
if ($max_protocol && !empty($max_protocol) && $max_protocol != NULL) {
$protocol_number = (int) $max_protocol + 1;
} else {
$protocol_number = 1;
}
return $protocol_number;
}
模型
public function getYearsProtocol($year) {
$qry = $this->db->select('MAX(protocol_number) as max_protocol_number')
->from('requests')
->where('protocol_year', $year)
->get();
if ($qry->num_rows() > 0)
return $qry->row_array();
return FALSE;
}