2011-06-16 80 views
1

當我通過Model->save()保存(更新)MySQL數據庫中的字段時,如果我沒有爲設置了默認值的字段指定值,重置爲默認值。CakePHP Model :: save()將字段重置爲默認值

即使已經有該字段的值,也是這樣做的。

例如,考慮下面的代碼:

$existing_user = $this->CustomCart->User->field('id',array('User.email'=>$this->data['User']['email'])); 
if($existing_user) 
{ 
    //update information 
    $this->CustomCart->User->id = $existing_user; 
} 
$this->CustomCart->User->save($this->data); 

在這段代碼中,它會檢查,如果用戶已經與傳遞的電子郵件地址。如果是這樣,請使用傳遞的信息更新該用戶,否則創建一個新用戶。

但是我users表中有一個字段名爲role的默認值是customer

沒有創建一個新用戶的role被自動設置爲客戶所以當role$this->data設定值。

但是,更新現有的用戶時,即使他們有像「管理」別的東西的作用,但它仍然將該值重置爲客戶

我不知道這是爲什麼。我沒有專門設置的其他字段(沒有默認值)保持其值。那麼爲什麼有默認值的字段被重置?

回答

0

我會假設場()是你已經創建根據一些條件

拿到單場函數這個怎麼樣?:代碼

$existing_user = $this->CustomCart->User->field('id',array('User.email'=>$this->data['User']['email'])); 
if($existing_user !== false){ 
    //update information 
    $this->CustomCart->User->id = $existing_user; 
    $this->data['User']['role'] = "admin"; 
} 
$this->CustomCart->User->save($this->data); 

我會真的很驚訝,如果這段代碼不能正常工作

祝你好運!

+0

謝謝。實際上'field()'是框架的一部分,但它確實按照你的設想進行了操作。這個解決方案將解決我目前的問題,但是如果我將來添加更多的默認字段,我會再次遇到同樣的問題。我寧願找到問題的根源,所以我不僅可以解決這個問題,還可以確保它在未來的其他地方不會發生。 – 2011-06-16 14:43:26

+0

問題很簡單,實際上並不是問題。你試圖從CustomCart控制器中保存一個用戶,所以你必須在'$ this-> data ['User']'中設置所有的值..我的猜測是你沒有正確地構造你的$ this - >數據變量..做一個'print_r()',這樣我們可以看到數據 – pleasedontbelong 2011-06-16 15:14:04

+0

我沒有指定'$ this-> data ['User'] ['role']'。我爲什麼要? MySQL默認值是* customer *,這正是我希望它成爲**新用戶的原因。不過,我希望現有用戶的*角色*保留他們已經設置的任何內容(* admin *,* teammamber *,* unicorn *等)。如果它已經設置,爲什麼它會重置爲* customer *。這沒有任何意義,並不是MySQL應該表現的方式。當你進行更新時,你不必指定每個字段,只需要更改那些字段。順便說一句,我不想​​在這裏粗魯,我只是覺得我們不在同一頁。 – 2011-06-16 16:59:01

5

我得到了這個!您需要在保存之前設置此項:

$this->CustomCart->User->create(false); 

沒有錯誤Cake不知何故猜測模型應該是什麼樣子。

相關問題