2016-01-27 76 views
1

我已經在這裏5天了。我閱讀了所有我可以在這裏找到的答案,我嘗試了任何選項,我無法找到如何解決此緩存問題。cakephp檢查重複行

我使用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); 
} 

然後我們有一個表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); 
     } 
    } 
} 

第一循環$行有多個時間上彼此跟隨 相同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 = false;在模型之上以避免兌現。我不知道爲什麼會發生這種行爲,以及如何避免任何MySQL兌現此功能。

+0

爲什麼不使用驗證規則來測試'Sku'是獨一無二的,而不是重新發明車輪?如果'Sku'總是需要唯一'TableA'應該使用'Sku'字段上的'isUnique'驗證規則,如果它已經存在,會導致'save'失敗。這將大大簡化您的代碼。 – drmonkeyninja

+0

添加驗證工作就像在mysql表中添加唯一索引一樣工作,這就是我用來解決問題的方法。這證實find('first')正在使用緩存.....這裏真正的問題是如何禁用find('first')的緩存 –

+0

添加一個驗證規則是*不同於添加唯一索引在桌子上。驗證規則將首先檢查數據庫是否尚未使用該值,並且會阻止保存查詢運行(以及標記錯誤),只是在表上添加唯一索引不會阻止Cake運行查詢這會導致你看到的MySQL錯誤被拋出。您確實應該將其作爲驗證規則來執行此操作,否則在嘗試保存數據時不會捕獲這些錯誤。 – drmonkeyninja

回答

0

當用戶點擊「刷新」數據或在填寫表單並添加用戶數據時發生?您使用哪種方法來收集GET或POST數據?

+0

從給我們一個數組的API調用加載數據數組。 該數組有重複,但我們希望我們的表中有唯一的值。 所以我們測試在插入之前Sku是否已經存在。這個例外來自於我們有一個UNIQUE索引(它現在解決了重複問題),但仍然不應該發生。 –