Во-первых, извините за мой английский, это не мой родной язык.
Это проблема. Я пытаюсь построить одну форму в 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 Пользователь не работает
Посмотреть изображение
Спасибо всем, кто пытается мне помочь!
Задача ещё не решена.
Других решений пока нет …