2015-06-21 110 views
0

每次我嘗試嘗試更新一行,我收到一個錯誤,說「有些事情是必需的」。在codeigniter中,您可以更新行,而無需在mysql tabel設置中將所有內容都設置爲null。保存模型值無空

我只想更新一個值而不是整行。

這可能嗎?

if ($users->save() == false) { 
    echo "Umh, We can't update the user right now: \n"; 
    foreach ($users->getMessages() as $message) { 
     echo $message, "<br>"; 
    } 
    $this->flash->error("Error in updating information."); 
    $this->response->redirect('user/profile'); 
     } else { 
      echo "Great, a new robot was saved successfully!"; 
      $this->flash->success("Member has been updaed successfully."); 
      //$this->response->redirect('user/profile'); 
     } 

回答

0

你isseue是因爲您已經填寫表格並沒有正確定義的模型。在試圖保存之前,Phalcon正在驗證所有的fo模型數據。如果您使用所有默認值定義您的模型,請正確跳過,如果您願意,可以在單個列上觸發更新。

如果您有定義,它不允許空值,但是您仍然需要空值或默認值,您可能需要在模型實現中使用'beforeCreate'操作。另外,如果在第一次插入時設置了默認設置,您可能想要使用skipAttributes方法。

更多信息請見文檔:Working with Models。到目前爲止,我已經找到了最好的互聯網。

此外,以下是爲空的電子郵件列和NOT NULL DEFAULT '0'一個例子「跳過」從我的工作代碼柱:

public function initialize() { 
    $this->skipAttributesOnCreate(['skipped']); 
} 

public function validation() 
{ 
    if($this->email !== null) { 
     $this->validate(
      new Email(
       array(
        'field' => 'email', 
        'required' => true, 
       ) 
      ) 
     ); 
     if ($this->validationHasFailed() == true) { 
      return false; 
     } 
    } 
} 

你想「需要的東西」的錯誤。你所缺少的只是模型默認的恰當實現。一旦你習慣了這些機制,你會發現它們很容易處理,而且利弊多於缺點。

0

你在做什麼叫做插入。在預先存在的行中將列設置爲不同的值稱爲更新。

後者是靈活的,前者不是。

我強烈建議不要治療數據庫像this is what i feel like

把所有的數據。空是你的敵人

+0

因此,每次我想更新一個數據庫,我需要包括所有其他變量?有沒有辦法只更新行的單個部分? – GNov

+0

沒有你不需要'更新'。假設你有11列。你可以更新1,4.無論如何。由於其他原因(如主鍵和約束),更新可能會失敗,但這是另一個問題 – AsConfused