updateOrСоздать, чтобы изменить внешний ключ и, если он не существует, удалить

У меня есть эти три таблицы: Class, Schedules а также Attendance,

Профессор выбирает расписание, пропущенное студентом для записи посещаемости. Для этого он использует флажки, которые будут возвращать student_id, class_id а также schedule_id, Каждый раз, когда профессора меняют посещаемость, необходимо менять schedule_id,

Проблема в том, когда он разыгрывает непосещение («Этот студент пропустил мой класс в этом графике») но хочу вернуть его потом («Этот студент не пропустил урок в этом расписании, моя ошибка»), профессор удалит посещаемость и schedule_id должен быть отброшен

Итак, мне нужен способ найти способ удалить внешний ключ, если у меня нет schedule_id по запросу в updateOrCreate метод.

Контроллер, который разыгрывает посещаемость:

foreach ($attendances as $f){
$class->attendances()->updateOrCreate(
[
'class_id' => $f['class_id'],
'student_id' => $f['student_id'],
],[                    [
'schedule_id' => $f,
]
);
}

Модель класса:

public function attendances()
{
return $this->hasMany(Attendance::class);
}

Связи:

Class->hasMany->attendances(). Attendances->hasMany->schedules.

0

Решение

Проверяя значение вашего флажка, вы можете установить необходимые действия для этого варианта использования.

if (Request::get('mycheckbox')) {
// got schedule_id
// Insert/Update Record
} else {
// Don't have schedule_id
// Delete Record
Schedules::destroy($id);
}

Если вы просто хотите обновить таблицу многие ко многим, удалив все идентификаторы, которые больше не указаны в запросе, используйте sync, Ссылка на документацию: https://laravel.com/docs/5.5/eloquent-relationships#inserting-and-updating-related-models -> Раздел Синхронизация ассоциаций

Вы также можете использовать метод синхронизации для построения ассоциаций «многие ко многим». Метод синхронизации принимает массив идентификаторов для размещения в промежуточной таблице. Любые идентификаторы, которых нет в данном массиве, будут удалены из промежуточной таблицы. Таким образом, после завершения этой операции в промежуточной таблице будут существовать только идентификаторы в данном массиве.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector