Cakephp - saveAll和beforeSave

时间:2013-01-30 15:09:32

标签: php cakephp cakephp-2.3

由于CakePHP更新到2.3.5,我遇到了保存数据的问题。 我不想保存不含价格的数据。

我的方法在我的模型中保存之前看起来像这样:

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删除空白行,但我可以做得更好吗?

1 个答案:

答案 0 :(得分:1)

您是否考虑过使用CakePHP's built-in data validation?这将允许您指定您不想保存除非“价格”是某个数量,大于零,范围......等等等。

基本上,您为字段设置规则,并且每次尝试保存行时,都会确保每个字段都通过您设置的任何验证。

它有大量的验证类型,包括有效的电子邮件,号码范围,电话号码,正则表达式等。