2

由于 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' => ''
    )
)

saveAll 在我的控制器“Commande”中(返回 false):

debug($this->Commande->saveAll($this->request->data, array('validate' => 'first')));

我希望将我的数据保存在模型“选项”=> 3 的最后一行中。我可以在控制器中使用 foreach 删除空白行,但我可以做得更好吗?

4

1 回答 1

1

您是否考虑过使用CakePHP 的内置数据验证功能?这将允许您指定您不想保存,除非“价格”是某个金额,大于零,介于一个范围......等等等等。

基本上,你为你的字段设置规则,每当你尝试保存一行时,它确保每个字段都通过你设置的任何验证。

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

于 2013-01-30T15:38:32.480 回答