Cakephp - saveAll 和 beforeSave
Posted
技术标签:
【中文标题】Cakephp - saveAll 和 beforeSave【英文标题】:Cakephp - saveAll and beforeSave 【发布时间】:2013-01-30 15:09:31 【问题描述】:由于 Cakephp 更新到 2.3.5,我无法保存数据。 我不想保存不包含价格的数据。
我的模型中的 beforeSave 方法如下所示:
public function beforeSave($options = array())
if(empty($this->data['MyModel']['price']))
unset($this->data['MyModel']);
return true;
自从我更新后,我在 /lib/Model/Model.php (l. 1751) 中找到了这个
if ($success && $count === 0)
$success = false;
如果我评论这 3 行,我的问题就解决了。你知道我的 beforeSave 中不阻止我保存的方法吗?
如果我使用数据验证,我的所有数据都不会用我的 saveAll 保存。
示例模型“选项”验证器:
public $validate = array(
'prix' => array(
'rule' => 'notEmpty'
)
);
要保存的示例数据:
array(
'Commande' => array(
'nature_commande' => '0',
'base_id' => '1',
'nom' => 'Test',
'chef_id' => '531',
),
'Option' => array(
(int) 0 => array(
'prix' => '5456'
),
(int) 1 => array(
'prix' => '45645'
),
(int) 3 => array(
'prix' => ''
)
)
在我的控制器“Commande”中保存所有内容(返回 false):
debug($this->Commande->saveAll($this->request->data, array('validate' => 'first')));
我希望将我的数据保存在模型“选项”=> 3 的最后一行中。 我可以在我的控制器中使用 foreach 来删除空白行,但我可以做得更好吗?
【问题讨论】:
CakePHP 2.3.5?最新版本是 2.3.0 :-?$count
是字段数。如果您取消设置 $this->data[]
中的所有内容,那么您将没有可以保存蛋糕的字段,因此满足该条件。您的逻辑/代码错误,蛋糕的模型代码很好。使用 cakes 内置验证
【参考方案1】:
您是否考虑过使用CakePHP's built-in data validation?这将允许您指定您不想保存,除非“价格”是某个金额,大于零,介于一个范围......等等等等等等之间。
基本上,您为字段设置规则,并且在您尝试保存一行时,它确保每个字段都通过您设置的任何验证。
它有大量的验证类型,包括有效的电子邮件、号码范围、电话号码、正则表达式等等。
【讨论】:
以上是关于Cakephp - saveAll 和 beforeSave的主要内容,如果未能解决你的问题,请参考以下文章