我已经在这里待了 5 天了。我在这里阅读了所有答案,我已经尝试了任何我找不到解决此缓存问题的选项。
我正在使用可以升级的cakephp 2.4.4,但我在任何更改中都没有看到我的问题.logPercona MYSQL 5.6 Innodb
我们有一个模型,我们在循环中调用它来插入行
App::import('Model', 'TableA');
$TableA = new TableA();
foreach($rows as $row){
$TableA->InsertRow($row);
}
然后我们有表A的模型
我在 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
)
)
我也在调试模式 2 中运行
在第二个循环中,查询应返回 id,并且循环不应尝试插入行,但事实并非如此。我添加了 var $cacheQueries = 假;在模型之上以避免兑现。我不知道为什么会发生这种行为以及如何避免此功能的任何mysql兑现。
当用户单击"刷新"数据时发生,还是在您填写表单并添加用户数据时发生?使用哪种方法来收集 GET 或 POST 数据?