cakephp 3 multi level associated save -
i have users model has hasone relationship employees model. when save user add record in employees table user_id. works fine.
the employee can associated belongstomany courses through coursesemployees table. saves ok when save employees.
my problem want save 3 three courses not saved.
save user -> save employee new user_id -> save courses chosen new employee employee_id in 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' ]); }
users 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() ?>
here post data sent add method save. user , employee saved correctly no recored in courses_employees.
if save employee form employee controller courses_employees add ok know associations setup ok.
[ 'role_id' => '1', 'email' => 'asdasd@asdasd.com', '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 not 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']); }
i have found solution. have read cookbook again , noted in 1 of examples snippets 'associated' => ['tags', 'comments.users']
i have applied controller , works. saving on levels.
$user = $this->users->patchentity($user, $this->request->data, [ 'associated' => ['employees', 'employees.courses'] ]);
Comments
Post a Comment