2014-09-05 68 views
0

試圖簡化,我有一個Excel和他們的電子郵件的電子表格。我想要的是使用saveAll將它們一次全部插入到數據庫中。讓CakePHP saveAll函數忽略錯誤並繼續

問題是,我需要重新上傳電子表格,每次它裏面有一些新人。在這種情況下,我需要saveAll來保存所有新的人員,並忽略由於數據庫中已存在的老人(人們的電子郵件具有唯一規則)而發生的驗證錯誤。有任何想法嗎?

編輯:我現在所擁有的是,當saveAll方法試圖保存已存在的記錄(即其電子郵件已存在於數據庫中)時,它不會保存任何內容。我需要的是保存來自電子表格的新內容,並忽略那些已經存在的內容(即不保存已經存在的內容)。

+0

任何想法關於什麼?問題是什麼?你不忽略驗證錯誤,或者你想忽略它們,但你不知道如何?或者是什麼? – Nunser 2014-09-05 20:46:23

+0

對不起,我沒有意識到這是不清楚的。將更新嘗試更清楚。 – lucasnadalutti 2014-09-05 20:47:11

回答

1

將第二個參數設置爲false,以便不檢查驗證。通過數據

循環,並檢查該特定的記錄存在,如果它不然後將其推到一個臨時數組:

考慮你的要求,我會做到這一點。

現在您可以使用該臨時數組作爲您的saveAll調用的參數。

的僞代碼將是這樣的:

foreach ($originalDataToBeSaved as $something) { 
    if ($this->find('count', array('conditions' => $yourConditions)) == 0) { 
     $tempArray[] = $something;  
    } 
} 
$this->saveAll($tempArray); 

編輯:我更新的代碼,以反映Nunser說,新數據沒有ID因此,我們需要使用另一個做我們的搜索搜索條件。

+1

雖然,新數據不會有ID,所以他必須通過其他字段進行比較(只是爲了記住) – Nunser 2014-09-05 21:16:08

+1

然後做一個findByEmail或者什麼? – schnauss 2014-09-05 23:58:40

0

試試這個

foreach ($originalDataToBeSaved as $key => $something) { 
    if ($this->hasAny($your_condition_to_chekc_existing_user) { 
     unset($originalDataToBeSaved[$key]);  
    } 
} 
$this->saveAll(($originalDataToBeSaved); 

如果你不想驗證,然後使用 -

$this->saveAll(($originalDataToBeSaved, array('validate' => false)); 
+0

嘿,謝謝你的回答。我結束了使用validateMany類似的解決方案。 – lucasnadalutti 2014-09-10 14:30:00