Magento DDL cache
Иногда, при изменении некоторых таблиц, Magento не видит новых полей этой таблицы. Хотя они присутствуют. Обычно виноват в этом DDL кеш.
Мне не удалось его сбросить через сброса кеша в админки Magento. Так же я не получил необходимого результата, после очистки var/cache и var/full_page_cache “вручную”
После гугление, я нашел совет о вызове следующего кода в скрипте апгрейда:
1 2 3 4 5 6 7 8 9 |
if (method_exists($this->_conn, 'resetDdlCache')) { // apply only to specific tables $this->_conn->resetDdlCache('table1'); $this->_conn->resetDdlCache('table2'); // or whole DDL cache $this->_conn->resetDdlCache(); } |
однако и это мне не помогло..
Я поковырял код и нашел где происходит проверка кеша, для моего случая, это место находится тут:
открываем файл \public_html\site.com\www\lib\Varien\Db\Adapter\Pdo\Mysql.php
примерно 1580 строка:
1 2 3 4 5 6 7 8 |
public function describeTable($tableName, $schemaName = null) { $cacheKey = $this->_getTableName($tableName, $schemaName); $ddl = $this->loadDdlCache($cacheKey, self::DDL_DESCRIBE); if ($ddl === false) { $ddl = parent::describeTable($tableName, $schemaName); |
я сделал следующее: переписал код вот так, чтобы отработало тело if-а:
1 2 3 4 5 6 7 8 9 10 11 |
public function describeTable($tableName, $schemaName = null) { $cacheKey = $this->_getTableName($tableName, $schemaName); $ddl = $this->loadDdlCache($cacheKey, self::DDL_DESCRIBE); $ddl = false; if ($ddl === false) { $ddl = parent::describeTable($tableName, $schemaName); |
дальше сбросил кеши через админку magento и вуаля, все заработало (кеш перезаписался).
Последним шагом, я вернул все на место, убрав свои правки:
1 2 3 4 5 6 7 8 |
public function describeTable($tableName, $schemaName = null) { $cacheKey = $this->_getTableName($tableName, $schemaName); $ddl = $this->loadDdlCache($cacheKey, self::DDL_DESCRIBE); if ($ddl === false) { $ddl = parent::describeTable($tableName, $schemaName); |
Разумеется, это решение костыль и так делать не надо и бла-бла-бла.. Но это просто работает 🙂
Author: | Tags: /
| Rating:
Leave a Reply