當我通過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
設定值。
但是,更新現有的用戶時,即使他們有像「管理」別的東西的作用,但它仍然將該值重置爲客戶。
我不知道這是爲什麼。我沒有專門設置的其他字段(沒有默認值)保持其值。那麼爲什麼有默認值的字段被重置?
謝謝。實際上'field()'是框架的一部分,但它確實按照你的設想進行了操作。這個解決方案將解決我目前的問題,但是如果我將來添加更多的默認字段,我會再次遇到同樣的問題。我寧願找到問題的根源,所以我不僅可以解決這個問題,還可以確保它在未來的其他地方不會發生。 – 2011-06-16 14:43:26
問題很簡單,實際上並不是問題。你試圖從CustomCart控制器中保存一個用戶,所以你必須在'$ this-> data ['User']'中設置所有的值..我的猜測是你沒有正確地構造你的$ this - >數據變量..做一個'print_r()',這樣我們可以看到數據 – pleasedontbelong 2011-06-16 15:14:04
我沒有指定'$ this-> data ['User'] ['role']'。我爲什麼要? MySQL默認值是* customer *,這正是我希望它成爲**新用戶的原因。不過,我希望現有用戶的*角色*保留他們已經設置的任何內容(* admin *,* teammamber *,* unicorn *等)。如果它已經設置,爲什麼它會重置爲* customer *。這沒有任何意義,並不是MySQL應該表現的方式。當你進行更新時,你不必指定每個字段,只需要更改那些字段。順便說一句,我不想在這裏粗魯,我只是覺得我們不在同一頁。 – 2011-06-16 16:59:01