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 Пользователь не работает
Посмотреть изображение

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

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]