我已经在这里工作了 5 天了。我在这里阅读了我能找到的所有答案,我尝试了所有可能的选项,但我找不到如何解决此缓存问题。
我正在使用可以升级的 cakephp 2.4.4,但我没有在任何 change.log 中看到我的问题 Percona MYSQL 5.6 Innodb
我们有一个模型,我们在循环中调用它来插入行
App::import('Model', 'TableA');
$TableA = new TableA();
foreach($rows as $row){
$TableA->InsertRow($row);
}
然后我们有了 TableA 的模型
我在 TableA.Sku 上添加了一个唯一索引以避免重复输入
class TableA extends AppModel {
var $name = 'TableA';
var $cacheQueries = false;
var $validate = array();
function InsertRow($data){
$this->clear();
try {
$result = $this->find('first', array(
'fields' => array(
'TableA.id',
),
'conditions' => array(
'TableA.Sku' => $data['Sku'],
),
));
pr($result);
if(!isset($result['TableA']['id'])){
$data['TimeStamp'] = strtotime("now");
$this->save($data);
}
return TRUE;
}
catch (Exception $e) {
pr($e);
$resultNow = $this->find('first', array(
'fields' => array(
'TableA.id',
),
'conditions' => array(
'TableA.Sku' => $data['Sku'],
),
));
pr($resultNow);
}
}
}
第一个循环 $Rows 有多次相同的 sku 相互跟随 第一个循环插入行 第二个循环给出:
array
(
)
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'tue026991015' for key 'Sku'
INSERT INTO `ki`.`TableA` (`Sku`, `TimeStamp`) VALUES ('tue026991015', 1453858976)
Array
(
[TableA] => Array
(
[id] => 31951
)
)
我也在 Debug模式 2 下运行
在第二个循环中,查询应该返回 id 并且循环不应该尝试插入该行,但事实并非如此。 我添加了 var $cacheQueries = false;在模型之上以避免兑现。我不知道为什么会发生这种行为以及如何避免任何 mysql 兑现此功能。
最佳答案
它发生在用户单击“刷新”数据时,还是发生在您填写表单并添加用户数据时?您使用哪种方法收集 GET 或 POST 数据?
关于php - cakephp 检查重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35028860/