Коррекция базы после удаления блога - есть решение
Иногда после удаления блога «сыплется сайт», и без лазания в базу ручками восстановить работоспособность нереально. И топики с описанием такого рода проблем появляются на этом сайте с завидной регулярностью. Потому и было предложено решение. И да, я опять задействовал для этого админку aceAdminPanel. Но в данном случае, по-моему, это более, чем оправдано :)
В плагине aceAdminPanel появилась новая позиция в меню: «Контроль БД» с единственным пока пунктом «Проверка удаленных блогов». Выполняется проверка, не состоят ли юзеры в удаленных блогах, и нет ли онлайн-комментариев, которые ссылаются на удаленные блоги. Если такие находятся — они выводятся админу. Хочет админ — пусть дальше разбирается, что там не так, либо может одним кликом удалить ссылки на удаленные блоги (вот, опять тавтология).
Кстати, я давно пришел к мысли, что даже в таблицах InnoDB не стоит полагаться на внешние ключи, а при удалении сущностей надо тщательно удалять также и все зависимые сущности, так, как будто нет этих ключей. Удаление — редкая операция, и пара-другая «холостых» запросов на удаление погоды не сделает, но может избавить от разных неожиданностей
В плагине aceAdminPanel появилась новая позиция в меню: «Контроль БД» с единственным пока пунктом «Проверка удаленных блогов». Выполняется проверка, не состоят ли юзеры в удаленных блогах, и нет ли онлайн-комментариев, которые ссылаются на удаленные блоги. Если такие находятся — они выводятся админу. Хочет админ — пусть дальше разбирается, что там не так, либо может одним кликом удалить ссылки на удаленные блоги (вот, опять тавтология).
Кстати, я давно пришел к мысли, что даже в таблицах InnoDB не стоит полагаться на внешние ключи, а при удалении сущностей надо тщательно удалять также и все зависимые сущности, так, как будто нет этих ключей. Удаление — редкая операция, и пара-другая «холостых» запросов на удаление погоды не сделает, но может избавить от разных неожиданностей
20 комментариев
Но я никак не могу воспроизвести этот кейс, есть четкие шаги, чтобы повторить баг?
1) Создается блог, юзер на этот блог подписывается, создает в нем топик и комментарий к нему
2) Этот блог удаляется
3) Наблюдаем ошибки в профайле юзера и в прямом эфире
А для надежности я еще таблицу с блогами из InnoDB в MyISAM переводил
Да, и кстати, подскажите кто: после удаления топика он должен удаляться из базы или нет? Потому как в первом случае еще и с топиками что-то не то — в базе они остаются (предположительно те, которые были в удаляемом блоге, а может и все — хз, терпения не хватило проверять).
во всяком случае, подписка на удаленный блог точно остается, даже если все в InnoDB
Я не афишировал эту фичу, т.к. хотел, чтоб ее проверили на практике
Предупреждение если удалить блог и не удалить топики которые содержаться в блоке произойдет фатал ерор) или пойти дальше.
Предупреждение если вы удалите этот блог, то все ваши топики которые находятся в этом блоке, тоже удаляться.
теперь еще дальше пойдем.
Предупреждение если вы хотите удалить этот блог то вам необходимо перенести все виды топиков, в другой блог.
или еще кручи, можно объединить все что я написал в месте.