Предел отношений [октябрьcms] - PullRequest
0 голосов
/ 26 марта 2019

У меня есть модель с именем Lessons, и у нее есть отношение belongsToMany с именем students с таблицей с именем students_for_lesson. В модели урока есть поля с именами number_of_students и number_of_enrollments для каждого урока.

я хочу остановить сообщение. Добавить учащихся для урока, когда значение number_of_enrollments достигает значения number_of_students.

1 Ответ

1 голос
/ 27 марта 2019

Одним из способов является прослушивание событий отношения модели (BelongsToMany): beforeAttach , afterAttach , beforeDetach , afterDetach

В этом случае, если вам нужно выполнить некоторые проверки перед созданием отношения, используйте событие beforeAttach:

LessonModel::extend(function ($model) {

    /** Before Attach */
    $model->bindEvent('model.relation.beforeAttach', function ($relationName, $attachedIdList, $insertData) use ($model) {

        // Student => Lesson Relation
        if ($relationName === 'your-lesson-student-relation-name') {

            // Check Number of enrollments & other stuff ...

            // throw new \ApplicationException('Cannot add student. Maximum number of enrollments reached.');
        }

    });

});

См. SO post & здесь о расширяющиеся модели

...