2015-06-21 74 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