yii2, имеется запись пользователя в таблице user и записи складов в таблице storage.
к нему (через actioUpdate), путем выделения чекбоксов, привязываю склады создавая записи с user_id и storage_id в смежной таблице many-to-many.
при следующем редактировании записи пользователя через js отмечаются чекбоксы с нужным storage_id, которые связаны с user_id.
необходимо при снятии выбора с чекбокса и последующего сохранения записи удалять деактивированную запись в смежной таблице.
сейчас делается так: при каждом сохранении записи удаляю все записи с такими storage_id, которые не были переданы в экшене.
но это , имхо, не правильно.
вопрос: как это можно реализовать лучше и правильнее ? с точки зрения производительности. просто дергать каждый раз эту таблицу, имхо, не очень оптимально.
а зачем тебе эта смежная таблица? сохраняешь настройки формы в виде json в одной колонке и 2 таблицы достаточно. Дальнейшие обработки уже делаешь запросом обращаясь к storage по настройкам из формы
iBird Rose, если я правильно понял, то Вы предлагаете хранить данные (в данном случае id складов) в форме json в колонке таблицы user?
нет, такой вариант мне не подходит, т.к. мне необходимо использовать эти связи помимо удаления и добавления.
Ruslan Ruslanov, я так понимаю вы хотите избежать лишнего запроса, если пользователь не убирал никакие склады? В таком случае вы можете наоборот передавать только те чекбоксы, которые пользователь снял. Соотвественно их и удалять из таблицы, если такие имеются.
Ruslan Ruslanov Ага, ничего что удаление записи - это очень длительная операция и под нагрузкой у вас буду проблемы?))
Разрастется - это на сколько? Проблемы с весом в мускуля начинаются от сотен GB, в рамках одного тазика.
index0h , насчет веса не знаю, но в районе 10к записей, с 4 полями типа int.
хотя, наверное это не много... я не очень хорошо разбираюсь в базах данных...
...и все таки я решил использовать ваш вариант.
это скорее моя личная заноза, болезнь, которая называется "преждевременная оптимизация".
не всем свойственна, но я ею страдаю, и где знаю, что могу оптимизировать, там стараюсь это делать.