У меня есть модель пользователей, которая имеет отношение hasOne к модели Employees. Когда я сохраняю пользователя, я также добавляю запись в таблицу Employees с user_id. Это прекрасно работает.cakephp 3 связанный с несколькими уровнями сбережения
Сотрудник может быть связан с классом toMany Courses через CoursesEmployees. Это экономит ок, когда я сохраняю только сотрудников.
Моя проблема заключается в том, что я хочу сохранить все 3 три, но курсы не сохраняются.
Сохранить пользователя -> сохранить сотрудника с новым user_id -> сохранить курсы, выбранные для нового сотрудника с employee_id в courses_employees
EmployeesTable.php
public function initialize(array $config)
{
$this->table('employees');
$this->displayField('name');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
]);
$this->belongsTo('Hotels', [
'foreignKey' => 'hotel_id',
'joinType' => 'INNER'
]);
$this->belongsToMany('Courses', [
'foreignKey' => 'employee_id',
'targetForeignKey' => 'course_id',
'joinTable' => 'courses_employees'
]);
}
пользователи add.ctp:
<?= $this->Form->create($user) ?>
<fieldset>
<legend><?= __('Add User') ?></legend>
<?php
echo $this->Form->input('role_id', ['options' => $roles, 'empty' => true]);
echo $this->Form->input('email');
echo $this->Form->input('active');
echo $this->Form->input('activation_key');
echo $this->Form->input('password');
echo $this->Form->input('employee.name');
echo $this->Form->input('employee.email');
echo $this->Form->input('employee.surname');
echo $this->Form->input('employee.employee_num');
echo $this->Form->input('employee.courses._ids', ['options' => $courses]);
?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>
Вот данные, отправленные в метод добавления для сохранения. При этом пользователь и сотрудник будут правильно сохранены, но не будут восстановлены в курсах.
Если я сохраняю форму сотрудника, то сотрудник-диспетчер курсов добавляет ok, поэтому я знаю, что ассоциации настроены нормально.
[
'role_id' => '1',
'email' => '[email protected]',
'active' => '11111111111',
'activation_key' => '1',
'password' => 'asdasdadasdasdasda',
'employee' => [
'name' => 'asdasdasdasd',
'email' => 'asdasdasd2dasd.com',
'surname' => 'asdasdads',
'employee_num' => 'asdasdadasdas',
'courses' => [
'_ids' => [
(int) 0 => '2'
]
]
]
]
UserController.php
public function add()
{
$this->loadModel('Courses');
$user = $this->Users->newEntity();
if ($this->request->is('post')) {
$user = $this->Users->patchEntity($user, $this->request->data, [
'associated' => ['Employees', 'Courses']
]);
if ($this->Users->save($user)) {
$this->Flash->success(__('The user has been saved.'));
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('The user could not be saved. Please, try again.'));
}
}
$roles = $this->Users->Roles->find('list', ['limit' => 200]);
$courses = $this->Courses->find('list', ['limit' => 200]);
$this->set(compact('user', 'roles', 'courses'));
$this->set('_serialize', ['user']);
}
Большое спасибо ... много искал для этого .. – Muthu
спас мой день! большое спасибо – ksno