CakePHP 3 - сохранение данных нескольких моделей в одной форме

Во-первых, извините за мой английский, это не мой родной язык.

Это проблема. Я пытаюсь построить одну форму в CakePHP 3 и сохранить данные в две модели, функция saveAll() не работает.

Это конкретный случай.

Есть пользователи, у пользователей есть несколько данных, таких как: имя пользователя, пароль, электронная почта и т. Д. Есть врачи, врачи - это пользователи, у которых есть другое поле, "номер доктора" И, наконец, есть пациенты, пациенты - это пользователи, у которых есть заболевание.

Отношения:

пользователи-врачи -> 0-1

врачи-пользователи -> 1-1

пользователи-пациенты -> 0-1

пациенты-пользователи -> 1-1

Теперь мой код (Thats Bake сгенерированный код)(Пример с врачами):

Пользователь TableModel Отношения:

public function initialize(array $config)
    {
        parent::initialize($config);
        $this->table('users');
        $this->displayField('id');
        $this->primaryKey('id');
        $this->addBehavior('Timestamp');
        $this->belongsTo('Countries', [
            'foreignKey' => 'country_id',
            'joinType' => 'INNER'
        ]);
        $this->belongsTo('Rols', [
            'foreignKey' => 'rol_id',
            'joinType' => 'INNER'
        ]);
        $this->hasOne('Doctors', [
            'foreignKey' => 'user_id'
        ]);
    }

Проверка пользователя:

 public function validationDefault(Validator $validator)
    {
        $validator
            ->allowEmpty('id', 'create');

        $validator
            ->requirePresence('user_email', 'create')
            ->notEmpty('user_email')
            ->add('user_email', 'validFormat', [
                'rule' => 'email',
                'message' => 'E-mail must be valid'
            ]);

        $validator
            ->requirePresence('user_username', 'create')
            ->notEmpty('user_username');

        $validator
            ->requirePresence('user_pass', 'create')
            ->notEmpty('user_pass');

        $validator
            ->add('user_birthdate', 'valid', ['rule' => 'date'])
            ->requirePresence('user_birthdate', 'create')
            ->notEmpty('user_birthdate');

        $validator
            ->requirePresence('user_avatar', 'create')
            ->notEmpty('user_avatar');

        $validator
            ->requirePresence('user_dni', 'create')
            ->notEmpty('user_dni')
            ->add('user_dni', 'validFormat',[
                'rule' => array('custom', '((([X-Z]{1})([-]?))?(\d{7,8})([-]?)([A-Z]{1}))'),
                'message' => 'Please enter a valid DNI or NIE.'
            ]);

        $validator
            ->requirePresence('user_name', 'create')
            ->notEmpty('user_name');

        $validator
            ->requirePresence('user_lastname', 'create')
            ->notEmpty('user_lastname');

        $validator
            ->add('user_address', 'valid', ['rule' => 'numeric'])
            ->requirePresence('user_address', 'create')
            ->notEmpty('user_address');

        $validator
            ->add('user_locality', 'valid', ['rule' => 'numeric'])
            ->requirePresence('user_locality', 'create')
            ->notEmpty('user_locality');

        $validator
            ->requirePresence('user_postalcode', 'create')
            ->notEmpty('user_postalcode');

        $validator
            ->requirePresence('user_phone', 'create')
            ->notEmpty('user_phone');

        $validator
            ->add('last_conection', 'valid', ['rule' => 'datetime'])
            ->allowEmpty('last_conection');

        $validator
            ->add('active', 'valid', ['rule' => 'boolean'])
            ->allowEmpty('active');

        $validator
            ->allowEmpty('token');

        return $validator;
    }

Доктор TableModel Отношения:

public function initialize(array $config)
    {
        parent::initialize($config);

        $this->table('doctors');
        $this->displayField('id');
        $this->primaryKey('id');

        $this->hasOne('Users', [
            'foreignKey' => 'user_id',
            'joinType' => 'INNER'
        ]);
    }

Доктор просмотра добавить:

<?= $this->Form->create($doctor) ?>
    <fieldset>
    <legend><?= __('Add Doctor') ?></legend>
        <?php
            echo $this->Form->input('User.user_email');
            echo $this->Form->input('User.user_username');
            echo $this->Form->input('User.user_pass');
            echo $this->Form->input('User.user_passconfirm');
            echo $this->Form->input('User.user_birthdate');
            echo $this->Form->input('User.user_avatar');
            echo $this->Form->input('User.user_dni');
            echo $this->Form->input('User.user_name');
            echo $this->Form->input('User.user_lastname');
            echo $this->Form->input('User.user_address');
            echo $this->Form->input('User.country_id', ['options' => $countries]);
            echo $this->Form->input('User.user_locality');
            echo $this->Form->input('User.user_postalcode');
            echo $this->Form->input('User.user_phone');
            echo $this->Form->input('User.rol_id', ['options' => $rols]);
            echo $this->Form->input('specialty');
        ?>
    </fieldset>

Доктор Контролер добавить метод:

public function add()
    {
        $doctor = $this->Doctors->newEntity();
        if ($this->request->is('post')) {
            $doctor = $this->Doctors->patchEntity($doctor, $this->request->data);
            if ($this->Doctors->save($doctor)) {
                $this->Flash->success(__('The doctor has been saved.'));
                return $this->redirect(['action' => 'index']);
            } else {
                $this->Flash->error(__('The doctor could not be saved. Please, try again.'));
            }
        }
        $this->set(compact('doctor'));
        $this->set('_serialize', ['doctor']);
    }

Симптомы:

  • Пользовательские данные не проверяются
  • Пользовательские данные не сохраняются

Фото:

Проверка видимости пользователя Рабочая Просмотреть изображение

Doctor View Validation Пользователь не работает View Image

Спасибо всем, кто пытается помочь мне!

0 ответов

Другие вопросы по тегам