Не могу решить проблему, казалось бы мелочь, но не продвигаюсь с мертвой точки.
Во вьюшке при создании пользователя user/create есть поля для заполнения пользователя (такие как логин, пароль, емаил…) и есть чекбоксы (айдишники из таблицы lpu). При создании пользователя - создается строка в соответствующей таблице. Помимо этого вставляю строки в таблицу lpususers(id, user_id, lpu_id) со значениями id, user_id-наш будущий id созданного пользователя, и lpu_id- айдишники выбранных чекбоксов.
Все работает. Но при редактировании другая схема. Нужно сперва очистить поля в таблице lpususers, где user_id-айди редактируемого пользователя, а потом заново добавить строки.
Сделал, чтоб все строки удалялись перед каждым сохранением в базу. Но получается так, что вносится лишь последняя запись. Как сделать, чтоб сперва все его записи удалились, а потом все нужные добавились.
Ну и вообще, поглядывайте на запросы, которые Yii генерит, особенно на те, что updateAll, deleteAll и аналоги. Продолбаете случайно аргумент - и хана всей базе.
Единственное мерзкое (возможно) место тут - значение атрибута модели.
Начните с названия many_many отношения. Для activeListBox это работало, а вот для checkboxList был баг, не позволяющий принимать на вход массив AR-записей, приходилось предварительно преобразовывать. Но, вроде, его исправляли.
Отработать нужно следующие ситуации:
начальная загрузка формы (выбранные значение берутся из БД при помощи many_many отношения)
сабмит формы с ошибкой валидации (выбранные значения берутся из $_POST, представляют собой массив айдишников)
Есть таблица user: id, login, password, role (employer | admin).
Есть таблица lpu: id, name, text.
Есть таблица lpususers: id, user_id, lpu_id
В форме редактирования user/update мне нужно было вывести чекбоксы со всевозможными значениями id из таблицы lpu. Причем, выбранными должны быть те чекбоксы, id которых уже есть в таблице lpususers (это будет поле lpu_id)
Вывел таким образом пока:
Прошелся поиском по lpuusers where user_id=$id редактируемого пользователя, вывел его отмеченные чекбоксы.
Затем прошелся поиском по lpu и вывел все значения id. Таким образом есть наложение значений. Как бы сделать без повторений?!