Cakephp - условное сохранение - PullRequest
2 голосов
/ 12 марта 2012

Моя форма содержит объект модели, который содержит пять дочерних объектов, связанных с помощью hasMany.Когда я сохраняю форму, я замечаю, что все поля, независимо от того, являются ли они пустыми, сохраняются в базе данных.Можно ли установить условие в методе обратного вызова beforeSave (), чтобы предотвратить сохранение дочерних элементов, у которых нет значений?Я попытался сбросить ключ в массиве, содержащем пустые значения, но строка все еще добавляется в базу данных.

Вот код для моей модели 'Mtd'.Модель Mtd содержит много обработок Flowrate.В моей форме есть флажок «Это лечение на основе скорости потока».Таким образом, если пользователь нажимает на это, то пользователь может заполнить его в полях.Однако, если пользователь не заполняет его, я хочу предотвратить добавление новой строки только с помощью внешнего ключа таблицы Mtd.

<?php
class Mtd extends AppModel {
   public $name = 'Mtd';
   public $hasOne = array('Treatmentdesign', 'Volumetreatment');
   public $hasMany = 'Flowratetreatment';


   function beforeSave() {
      if($this->data['Mtd']['is_settling'] != 1){
         unset($this->data['Flowratetreatment'][0]);
      } 
      return true;
   }
}

?>

Ответы [ 2 ]

0 голосов
/ 12 марта 2012

Я использовал этот код:

public function beforeSave() {
    if(isset($this->data[$this->alias]['profile_picture'])) {
        if($this->data[$this->alias]['profile_picture']['error']==4) {
            unset($this->data[$this->alias]['profile_picture']);
        }
    }
    return true;
}

в предыдущем приложении, чтобы удалить ключ из $this->data, если пользователь не загрузил файл, чтобы предотвратить перезапись старого значения.

это должно работать для вас (вам нужно адаптировать его; основываясь на том, что $this->data содержит на данный момент.

public function beforeSave() {
    if(empty($this->data[$this->alias]['the_key'])) {
        unset($this->data[$this->alias]['the_key']);
    }
    //debug($this->data); exit; // this is what will be saved
    return true;    
}

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

0 голосов
/ 12 марта 2012

Вы пробовали что-то вроде:

class User extends AppModel {
    function validates() {
        $this->setAction();
        #always validate presence of username
        $this->validates_presence_of('username');
        #validate uniqueness of username when creating a new user
        $this->validates_uniqueness_of('username',array('on'=>'create'));
        #validate length of username (minimum)
        $this->validates_length_of('username',array('min'=>3));
        #validate length of username (maximum)
        $this->validates_length_of('username',array('max'=>50));
        #validate presence of password
        $this->validates_presence_of('password');
        #validate presence of email
        $this->validates_presence_of('email');
        #validate uniqueness of email when creating a new user
        $this->validates_uniqueness_of('email',array('on'=>'create'));
        #validate format of email
        $this->validates_format_of('email',VALID_EMAIL);

        #if there were errors, return false
        $errors = $this->invalidFields();
        return (count($errors) == 0);
    }
}
?> 

в вашей модели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...