Cakephp - saveAll и перед сохранением

Так как 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.

Пример модели валидатора "Option":

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 в своем контроллере, чтобы удалить пустую строку, но могу ли я сделать это лучше?


person jlafforgue    schedule 30.01.2013    source источник
comment
CakePHP 2.3.5? Последняя версия 2.3.0 :-?   -  person Álvaro González    schedule 30.01.2013
comment
$count — количество полей. Если вы отключите все в $this->data[], то у вас не будет полей для сохранения торта, следовательно, это условие выполнено. Ваша логика/код неверны, код модели торта в порядке. Используйте встроенную проверку тортов   -  person Ross    schedule 30.01.2013


Ответы (1)


Думали ли вы об использовании встроенной функции проверки данных CakePHP? Это позволит вам указать, что вы не хотите сохранять, если «цена» не является определенной суммой, большей нуля, между диапазоном... и т. д. и т. д. и т. д.

По сути, вы устанавливаете правила для своих полей, и каждый раз, когда вы пытаетесь сохранить строку, каждое поле проходит любую проверку, которую вы установили.

Он имеет множество типов проверки, включая действительный адрес электронной почты, диапазоны номеров, номера телефонов, регулярное выражение и многое другое.

person Dave    schedule 30.01.2013