Иногда, при изменении некоторых таблиц, Magento не видит новых полей этой таблицы. Хотя они присутствуют. Обычно виноват в этом DDL кеш.
Мне не удалось его сбросить через сброса кеша в админки Magento. Так же я не получил необходимого результата, после очистки var/cache и var/full_page_cache “вручную”
После гугление, я нашел совет о вызове следующего кода в скрипте апгрейда:
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 строка:
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-а:
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 и вуаля, все заработало (кеш перезаписался).
Последним шагом, я вернул все на место, убрав свои правки:
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);
Разумеется, это решение костыль и так делать не надо и бла-бла-бла.. Но это просто работает 🙂