我第一次遇到奇怪的问题。我试图在数据库中插入具有自定义自动增量值的简单记录,例如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
提前谢谢。
最佳答案
您可能正在进入模型缓存。
从这里开始:Bakery article on caching
如果Model->cacheQueries==true,Cake会将查询结果存储在内存中。如果它稍后看到一个相同的查询,则结果将从内存中提取,而不是命中数据库。这只在单页请求期间缓存。但是,如果记录已更新,则不会清除缓存。这就是让大多数人不熟悉缓存的原因。
因此,要使代码工作,请将这一行添加到dobulk()函数的顶部:
$this->Tmp->cacheQueries = false;
当您在模型中运行原始SQL时,还可能需要将get_no()中的查询请求更改为:
$result = $this->query($strSql, false);
关于mysql - Cakephp使用create循环在MySql数据库中保存数组数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20535668/