我第一次遇到奇怪的问题。我试图在自定义自动增量值中插入简单记录,例如00001,00002,00003但无法获得增量值。每条记录都以相同的最大数量更新。
控制器代码
public function dobulk() {
for($i=0;$i<5;$i++) {
$data = array();
$this->Tmp->create();
$data['Tmp']['invoice_no'] = $this->Tmp->get_no();
$data['Tmp']['invoice_date'] = '2013-12-11';
$this->Tmp->save($data);
}
}
型号代码
public function get_no() {
$strSql = "SELECT
LPAD(IFNULL(RIGHT(MAX(invoice_no),5),0) + 1,5,'0') AS max_id
FROM tmps
;";
$result = $this->query($strSql);
$invoice_no = $result[0][0]['max_id'];
return $invoice_no;
}
数据库表
CREATE TABLE `tmps` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`invoice_no` varchar(20) DEFAULT NULL,
`invoice_date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1
提前致谢。
答案 0 :(得分:1)
您可能正在进入模型缓存。
从这里开始:Bakery article on caching
如果Model-&gt; cacheQueries == true,Cake会将查询结果存储在内存中。如果它稍后看到相同的查询,则结果将从内存中提取而不是命中数据库。这仅在单个页面请求的持续时间内缓存。但是,如果更新记录,则不会清除缓存。这是大多数人不熟悉缓存的原因。
因此,要使代码正常工作,请将此行添加到dobulk()函数的顶部:
$this->Tmp->cacheQueries = false;
当您在模型中运行原始SQL时,您可能还必须将get_no()中的查询请求更改为:
$result = $this->query($strSql, false);
答案 1 :(得分:0)
希望以下解决方案能为您提供帮助!
public function get_no() {
$strSql = "SELECT MAX(invoice_no) AS max_id FROM tmps;";
$result = $this->query($strSql);
$invoice_no = $result['Tmp']['max_id'];
return $invoice_no;
}
public function dobulk(){
$data = array();
$tempInvoiceNumber = $this->Tmp->get_no();
for($i=1;$i<=5;$i++) {
$data[$i]['Tmp']['invoice_no'] = tempInvoiceNumber+$i;
$data[$i]['Tmp']['invoice_date'] = '2013-12-11';
}
$this->Tmp->saveAll($data);
}