В этом примере из книги:
https://book.cakephp.org/3.0/en/orm/associations.html#using-the-through-option
class StudentsTable extends Table { public function initialize(array $config) { $this->belongsToMany('Courses', [ 'through' => 'CoursesMemberships', ]); } } class CoursesTable extends Table { public function initialize(array $config) { $this->belongsToMany('Students', [ 'through' => 'CoursesMemberships', ]); } } class CoursesMembershipsTable extends Table { public function initialize(array $config) { $this->belongsTo('Students'); $this->belongsTo('Courses'); } }
Я хочу ввести grade
соответствующий курсу # 8, при добавлении нового student
. Я следую этим двум примерам:
https://book.cakephp.org/3.0/en/orm/saving-data.html#saving-belongstomany-associations
а также
https://book.cakephp.org/3.0/en/views/helpers/form.html#associated-form-inputs
и изменить метод add
в StudentsController.php
public function add() { $student = $this->Students->newEntity(); if ($this->request->is('post')) { $student = $this->Students->patchEntity($user, $this->request->getData(), [ 'associated' => [ 'Courses']]); if ($this->Students->save($student,['associated' => ['Courses._joinData']])) { $this->Flash->success(__('The student has been saved.')); return $this->redirect(['action' => 'index']); } $this->Flash->error(__('The student could not be saved. Please, try again.')); } $courses = $this->Students->Courses->find('list', ['limit' => 200]); $this->set(compact('student', 'courses')); $this->set('_serialize', ['student']); }
и Students/add.ctp
чтобы иметь
echo $this->Form->control('courses._ids', ['options' => $courses]); echo $this->Form->control('courses.5._joinData.grade');
Когда я выбираю курс №8 в представлении и вводим соответствующий класс, я не вижу его в таблице CoursesMemberships
. Он добавляет саму запись, но grade
нет.