OctoberCMS - обновление поля в связанной таблице при вставке - PullRequest
0 голосов
/ 08 мая 2018

В OctoberCMS у меня есть три таблицы:
Студенты, курсы и подписки (studentID, courseID, активный)
Когда студент подписывается на курс, он не активируется, пока администратор не активирует его. Это логично. Но когда администратор открывает форму курса из бэкэнда, он может выбрать учеников для подписки на этот курс, после чего они добавляются в таблицу подписок. Здесь я хотел бы обновить поле: активен автоматически.
Как мне это уточнить?
Я написал этот код, но он не работал:

    public function afterSave()
    {
        foreach($this->students as $student)
        {
            $student->pivot->is_activated = true;
            $student->pivot->save;
        }
    }

Редактировать:

Это весь мой код после @Hardik Satasiya совета:

    class Course extends Model
    {
      public $belongsToMany = [
        'students'=>[
                'Sunsoft\Courses\Models\Student', 
                'table'=>'sunsoft_courses_student_course', 
                'order'=>'users.name', 
                'scope'=>'students',
                'timestamps' => true,
                'pivot'=>['id', 'is_activated'],
                'pivotModel'=>'Sunsoft\Courses\Models\StudentCourse',
        ],
      ];

      public function afterSave()
      {
        foreach($this->students as $student)
        {
            $student->pivot->is_activated = true;
            $student->pivot->save;
            $student->save;
        }
      }
    }

    class Student extends User
    {
      public $belongsToMany = [
        'courses'=>[
            'sunsoft\courses\models\Course', 
            'table'=>'sunsoft_courses_student_course', 
            'order'=>'sunsoft_courses_courses.name',
            'pivot'=>['id', 'is_activated'],
            'timestamps' => true,
            'pivotModel'=>'Sunsoft\Courses\Models\StudentCourse',
        ],
      ];
     }

     class StudentCourse extends Model
     {
        public $belongsTo= [
          'course'=>['sunsoft\courses\models\Course'],
          'student'=>['sunsoft\courses\models\Student', 'scope'=>'students', 'order'=>'users.name'],
        ];      
    }

Это ошибка, которую я получаю:
http://prntscr.com/jhrfzu

1 Ответ

0 голосов
/ 10 мая 2018

Для этого вам нужно определить правильный корабль отношений внутри Courses Модель

определить Pivot Model => Subscriptions вы уже сделали это.

Теперь определите правильное отношение в Courses.Модель

public $belongsToMany = [
    ....
    'students_pivot_model' => [
        'HardikSatasiya\Plugin\Models\Students', // replace model
        'table' => 'yournamespace_course_student', // replace tb name
        'pivot' => ['is_activated'],
        'timestamps' => true, // if you added times-stamp support
        'pivotModel' => 'HardikSatasiya\Plugin\Models\Subscriptions',
    ],
    ....
];

Теперь для установки is_activated вручную

public function afterSave()
{
    foreach($this->students_pivot_model as $pivot_model)
    {
        $pivot_model->pivot->is_activated = true;
        // no validations
        $pivot_model->pivot->forceSave(); 
    }
}

это должно работать.Если есть сомнения, пожалуйста, прокомментируйте.

...