How to drop a column from the table using the db.schema.xml file in Magento 2 – We all know from Magento 2.3 that Declarative Schema (db.schema.xml) was introduced to create the database tables in Magento 2. After creating a table and developing the custom extension you may feel free to drop/remove unwantedly created columns. To drop a column you can do it using the same db.schema.xml file.
I have noticed a question related to this topic in AD0-E717 Adobe Commerce
Developer with Cloud Add-on Professional exam.
Question – What should be done to allow the removal of columns from the database when deleting them from db.schema.xml?
- A. The removable columns should be defined in db_schema_whitelist.json.
- B. The columns should have “removable” attribute set to “true” in the db.schema.xml.
- C. The removable columns should be defined in db.schema_blacklist.json.
So to check the answer practically I tried, What I found was to remove a column using db.schema.xml, and add disabled=true to the relevant column. After that need to update the db_schema_whitelist.json file.
For example, let’s say you have added a column like this
<column name="answer" nullable="true" xsi:type="text" comment="answer"/>
You need to update this column line below
<column name="answer" nullable="true" xsi:type="text" comment="answer" disable="true"/>
After this need to update the db_schema_whitelist.json as follows and generate the db_schema_whitelist.json file.
{
"ayakil_faq_faq": {
"column": {
"answer": true,
},
"constraint": {
"PRIMARY": true
}
}
}
To generate the db_schema_whitelist.json file. you need to run the below command.
bin/magento setup:db-declaration:generate-whitelist --module-name=YourModule_Name
After updating the codes you need to run setup:upgrade command. After clear:cache command you can see the field is removed from the table.
So for the above question, I choose Answer A.