2.1 升级到 2.2 后,Upgrading data.. Unable to unserialize value.
2.1 升级到 2.2 后,Upgrading data.. Unable to unserialize value.
2.2.2后,后台configration 多行数据的保存 从序列化serialize改成json_encode()了。同时前台也是通过json_decode读取数据的。
所以 如果你前台用json_decode读取数据的话 就会出问题。
需要先修改core_config_data的数据,把serialize的数据改成json_encode来保存。
代码如下:
比如在项目路径/cli下新建一个php文件,updateConfiValue.php
getObjectManager(); $resource = $objectManager->get('MagentoFrameworkAppResourceConnection'); $connection = $resource->getConnection(); $tableName = $resource->getTableName('core_config_data'); //gives table name with prefix //Select Data from table //$sql = "Select * FROM " . $tableName . " WHERE `path`='carriers/flatrate/postcoderanges'"; $sql = "Select * FROM {$tableName}"; $result = $connection->fetchAll($sql); // gives associated array, table fields as key in array. foreach ($result as $row) { if (checkIsSerialized($row['value'])) { $value = json_encode(unserialize($row['value'])); $configId = $row['config_id']; $sql = "Update " . $tableName . " Set value = "."'".$value."'"." where config_id = $configId"; $connection->query($sql); } } function checkIsSerialized($str) { $data = @unserialize($str); if ($str === 'b:0;' || $data !== false) { return true; } return false; }
执行代码:
php cli/updateConfiValue.php
这样就都改过来了。
最后于 9月前 被admin编辑 ,原因:
