Удаление таблицы при удалении дополнения

При установки дополнения создается таблица в соответствии со схемой и она заполняется через файл resolve.tables.php через xPDOTransport::ACTION_UPGRADE. Дополнение работает нормально, в этом нет никаких проблем. А вот возникают они при удалении дополнения. Созданная таблица никак не хочет удаляться. Даже при таком условии
case xPDOTransport::ACTION_UNINSTALL:
      $c = $modx->prepare('DELETE FROM `modx_****` WHERE 1');
      $c->execute();
      break;
P.S. заместо звездочек там название таблицы.
В инете везде инфа как создать и установить. А вот что делать и как удалить таблицу при удалении?
Елена
30 марта 2016, 11:08
modx.pro
1 397
0

Комментарии: 9

Илья Уткин
30 марта 2016, 18:12
0
Надо в админке нажимать сначала «Денисталировать», «Все версии», а потом уже «Удалить»
    Сергей Шлоков
    30 марта 2016, 20:11
    +1
    Вообще-то DELETE FROM удаляет не таблицу, а записи из указанной таблицы. В modExtra есть код для удаления таблицы.
      Елена
      31 марта 2016, 09:13
      0
      Сергей, за правку по удалению спасибо. Чего-то переклинило с синтаксисом.
      Если делать через код в modExtra, то там лезет ошибка — img.w1.ru/e899ae Поэтому я и перешла на прямые запросы к базе.
      Осталось еще одно — не удаляются чанки. Снипет удаляется без проблем. А чанки, до этого привязанные к моему дополнению остаются просто не привязанными img.w1.ru/5gagwy Как их удалить?
        Сергей Шлоков
        31 марта 2016, 09:25
        0
        Странно, у меня работало без ошибок. Проверим.
        Можете сделать проще.
        // Поменяйте modExtra на свой
        $modelPath = $modx->getOption('modextra_core_path', null, $modx->getOption('core_path') . 'components/modextra/') . 'model/';
        $modx->addPackage('modextra', $modelPath);
        $manager->removeObjectContainer('Имя класса');
        За удаление чанков отвечает настройка. Поставьте true. Видите, у сниппета ниже стоит true, поэтому они обновляются и удаляются. Если не хотите, чтобы чанки у пользователя обновлялись при обновлении компонента, то придется удалять их вручную
        case xPDOTransport::ACTION_UNINSTALL:
            $chunk = $modx->getObject('modChunk', array('name'=>$chunkName));
            $chunk->remove();
            ...
          Елена
          31 марта 2016, 10:00
          0
          Нет, не хочет нормально как объект удаляться img.w1.ru/6xipco — завис
            Сергей Шлоков
            31 марта 2016, 10:11
            0
            Тогда остается такой вариант
            case xPDOTransport::ACTION_UNINSTALL:
                  $c = $modx->prepare('DROP TABLE modx_****');
                  $c->execute();
                  break;
              Елена
              31 марта 2016, 10:15
              0
              Сергей, спасибо за подсказку по настройкам чанков. Сейчас всё нормально удаляется. С условием прямого запроса на удаление таблицы.
            Василий Наумкин
            31 марта 2016, 10:04
            0
            Если мне не изменяет память, проблема в том, что ресолвер вызывается после удаления модели, поэтому ни addPackage, ни всё остальное работать не будет.
              Елена
              31 марта 2016, 10:08
              0
              Я тоже так подумала, не зря же ошибки лезут. Поэтому просто sql запрос на удаление таблицы.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        9