X

Magento DDL cache

Иногда, при изменении некоторых таблиц, 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);

Разумеется, это решение костыль и так делать не надо и бла-бла-бла.. Но это просто работает 🙂

Категории: Magento
Тэги: ddlddl cache