11

After being able to update magento to 2.3 (which was a pain by itself) I managed to get to the part where the database needs to be updated. Which is in current state when I try to run the command bin/magento setup:upgrade:

Cache cleared successfully
File system cleanup:
/var/www/html/generated/code/Composer
/var/www/html/generated/code/MSP
/var/www/html/generated/code/Magento
/var/www/html/generated/code/Symfony
Updating modules:
Schema creation/updates:
Cannot process definition to array for type enum

I can't however manage to find where this enum thing comes from. I also can't find any errors containing where this enum thing comes from...

anyone knows where this error comes from and how I can debug this? I know this can't lead to a specific page, but where do I need to focus on and how can I find out how I can solve this massive blockage of the site :D

7

2 Answers 2

17

No need to update in core files, please follow up my solution. Open Mysql database and select database and use below queries. This query also will be useful to find out the datatype CHAR error when upgrade to Magento 2.3.

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE ='enum';

Then the table will be list, after that you have to update the column datatype to the acceptable data type like varchar,etc.

Eg: ALTER TABLE table_name MODIFY column_name VARCHAR(10);

Note: Update only magento table if you have the result using search query not other mysql table.

Try this, thumps up.

2
  • This is the only solution which works. Just a syntax fix (MySQL) use MODIFY instead CHANGE: ALTER TABLE table_name MODIFY column_name VARCHAR(10);
    – vladPavlov
    Commented Jul 18, 2019 at 8:23
  • Thanks for the updates. Commented Jul 18, 2019 at 8:36
13
+50

You are getting this error because "data type" of any third party extension's table column is enum.

So you need to find out column name using debug in following file.

See below file /vendor/magento/framework/Setup/Declaration/Schema/Db/DefinitionAggregator.php and check this fromDefinition() and add debug code to find column name.

public function fromDefinition(array $data)
{
    $type = $data['type'];
    if (!isset($this->definitionProcessors[$type])) {

       echo "<pre>";
       print_r($data); exit();

       throw new \InvalidArgumentException(
       sprintf("Cannot process definition to array for type %s", $type)
            );
    }

    $definitionProcessor = $this->definitionProcessors[$type];
    return $definitionProcessor->fromDefinition($data);
}

Please run again setup:upgrade and you will get array of column data in console. from this array you will get name of column from your third party extension table.

Now from that table please change column's data type "enum" to "text" and issue will be fixed.

REF: Cannot process definition to array for type tinytext on Magento 2.3.0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.