yii2, имеется запись пользователя в таблице user и записи складов в таблице storage.
к нему (через actioUpdate), путем выделения чекбоксов, привязываю склады создавая записи с user_id и storage_id в смежной таблице many-to-many.
при следующем редактировании записи пользователя через js отмечаются чекбоксы с нужным storage_id, которые связаны с user_id.
необходимо при снятии выбора с чекбокса и последующего сохранения записи удалять деактивированную запись в смежной таблице.
сейчас делается так: при каждом сохранении записи удаляю все записи с такими storage_id, которые не были переданы в экшене.
но это , имхо, не правильно.
вопрос: как это можно реализовать лучше и правильнее ? с точки зрения производительности. просто дергать каждый раз эту таблицу, имхо, не очень оптимально.
По сути есть два варианта:
При сохранении из смежной таблицы удаляем все строки с user_id. И заного туда добавляем. Получается мы из смежной таблицы удалили все связи с пользователем и заново добавили.
Второй вариант это сравнение. Допустим при сохранении мы получили id's - 1, 3, 6.
Делаем запрос к базе по user_id. Например там 2, 3, 7, 8. Теперь сравниваем иды. Если в старом списке есть иды, а новом нет, то удаляем их по storage_id. Если в старом списке нет идов, а в новом есть, то добавляем их.
По мне так первый вариант должен вам подойти.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости