2010-05-13 154 views
4

有沒有辦法在不使用模型 - >查詢函數的情況下在「蛋糕中插入忽略」?Cakephp插入忽略功能?

  $this->Model->save(array(
       'id' => NULL, 
       'guid' => $guid, 
       'name' => $name, 
      )); 

生成錯誤:

Warning (512): SQL Error: 1062: Duplicate entry 'GUID.....' for key 'unique_guid' [CORE/cake/libs/model/datasources/dbo_source.php, line 524] 

這將是巨大的,可以設置一些標誌或選項,上面寫着「不關心」

回答

7

這不是一個真正的INSERT IGNORE解決方案,但要在應用程序級別處理這種情況,您需要使用驗證規則。如果您只需將isUnique驗證規則(2.x)(3.x)附加到模型中的​​字段,則如果guid已經存在,Cake將自動退出保存操作。

在幕後它會向數據庫提出兩個查詢,而不是INSERT IGNORE會產生的查詢,但這不應該是一個大問題。

一個問題可能是它會返回false這些失敗的操作,您將不得不使用$this->Model->invalidFields()來找出問題所在,以及是否可以忽略它。您可以覆蓋Model::save()在模型中執行此操作,因此您不必每次都在控制器中執行此操作。

在保存之前,您可能還想使用$this->Model->isUnique(array('guid' => $guid))2.x)(3.x)進行手動檢查。同樣,你可以重寫save方法,如果guid不是唯一的,它會默默地返回true,但要小心這種事情。

+0

我同意它看起來像我需要看看其他選項。對於我的情況,我最終需要再次查詢,所以這是完美的(isUnique)。我不知道有這樣的功能 – SeanDowney 2010-05-14 23:08:09

-1

我不認爲有這樣的簡單的標誌或CakePHP中的選項,因爲此警告最初由MySql生成,而不是蛋糕本身。如果您不需要​​上的獨特功能,則必須執行一些索引更改查詢。例如,

$this->Model->query("ALTER TABLE `yourdatebasename`.`yourtablename` DROP INDEX `guid` ,ADD INDEX `guid` (`guid`)"); 
+1

所以非常「沒有解決方案?」 – SeanDowney 2010-05-14 02:38:25

+0

我不敢讓Mysql說'我不在乎'你必須這樣做。:) – Young 2010-05-14 03:02:26