#caching #magento
#кэширование #magento
Вопрос:
Я разрабатываю расширение Magento, которое вводит новую таблицу в БД. Всякий раз, когда я выпускаю новую версию расширения, которое вносит изменения в схему таблицы, я обнаруживаю, что пользователи вынуждены вручную нажимать кнопку «Очистить хранилище кэша» в разделе Система> Управление кэшем.
Я бы хотел, чтобы мое расширение автоматически очищало кэш при установке. Я знаю, как сделать то же самое, что и кнопка, программно, но я бы предпочел этого не делать, потому что это удаляет всю папку кэша Magento и негативно влияет на производительность.
Может кто-нибудь знать, как написать код, который очистит кэширование схемы моей таблицы и сделает это как можно более конкретно, оставляя несвязанные кэшированные данные неповрежденными?
Обновление: Я нашел файл, содержащий кэш схемы моей таблицы, здесь: /var/cache/mage-f/mage---d07_DB_PDO_MYSQL_DDL_<table_name>_1d
. Теперь, как мне настроить его таргетинг в коде? 🙂
Комментарии:
1. Обычно требуется обновление кэша. Как вы выполняете изменения?
2. Я был удивлен этим, а также тем, что я не видел этого в предыдущей версии моего расширения. Вот что у меня есть в моем сценарии обновления:
$installer = $this; $installer->startSetup(); $installer->run(" ALTER TABLE '{$this->getTable('my_table')}' ADD COLUMN 'columnX' INT(11) NULL, ADD COLUMN 'columnY' VARCHAR(45) NULL, ADD COLUMN 'columnZ' VARCHAR(45) NULL, ADD COLUMN 'columnW' text NULL AFTER 'columnA'; "); $installer->endSetup();
Делаю ли я что-нибудь необычное?
Ответ №1:
Это то, что я смог придумать:
$app = Mage::app();
if ($app != null)
{
$cache = $app->getCache();
if ($cache != null)
{
$cache->clean('matchingTag', array('DB_PDO_MYSQL_DDL'));
}
}
При этом будут удалены только записи кэша и файлы метаданных, которые содержат информацию о схемах БД.
Обратите внимание, что эти записи будут удалены для всех таблиц. Не существует простого способа очистить кэшированную схему конкретной таблицы и оставить остальные нетронутыми.