TikTok World 2025: Why Sellers Can’t Afford to Ignore What’s Coming Next
TikTok World 2025: Why Sellers Can’t Afford to Ignore What’s Coming Next
Magento has introduced a new feature called Declarative Schema which aims to simplify the Magento installation and upgrade processes. This new concept will allow a developer to get away from writing updates for each new version in favour of declaring the final result that the developer wants to achieve.
To achieve the final result developers need to add, rename then change the type of the column in order to get the final result, which was not efficient and also time-consuming.
The new declarative schema approach allows developers to declare the final desired state of the database and has the system adjust to it automatically, without performing redundant operations. Developers are no longer forced to write scripts for each new version. In addition, this approach allows data to be deleted when a module is uninstalled.
In this blog, we will only discuss file required for a Declarative Schema.
You can check our complete module here and you can also modify it according to your need.
Firstly create a file “db_schema.xml” inside folder “Ced/GraphQl/etc” and write the following code
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
<table name="author_data" resource="default" engine="innodb" comment="Author Table">
<column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="Author ID"/>
<column xsi:type="varchar" name="author_name" nullable="false" length="255" comment="Author Name"/>
<column xsi:type="varchar" name="author_email" nullable="false" length="255" comment="Author Email"/>
<column xsi:type="varchar" name="affliation" nullable="false" length="255" comment="Affliation"/>
<column xsi:type="int" name="age" unsigned="true" nullable="true" identity="false" default="" comment="Age"/>
<constraint xsi:type="primary" name="PRIMARY">
<column name="id"/>
</constraint>
</table>
</schema>
Each table node represents a table in the database.
A table node can contain three types of subnodes:
The column subnode defines a column in a table. Each column requires its own declaration.
So when you run setup:upgrade command then it will create the table “author_data.”
If you want to add a new column to the existing table then you need to add a new column node in db_schema.xml and on running upgrade command it will add the new column.
Now if you want to remove the existing column then you either need to remove the column node (<column>) inside the table node or you can set disabled attribute to true.
<column xsi:type="int" name="age" unsigned="true" nullable="true" identity="false" default="" comment="Age" disabled=”true” />
But before running the upgrade command you need to add your schema to db_whitelist_schema.json file by running the following command-
php bin/magento setup:db-declaration:generate-whitelist --module-name=Ced_GraphQl
Ced_GraphQL is a module name. You need to specify your module name there.
Now on running setup:upgrade command it will remove the column.
You can change the column type, changing its type attribute to int, varchar, text etc.
To rename a column you need to first remove the one you don’t want and add another column with your desired name. Now you need to migrate that column data into a newly created one, to do this you need to set an attribute on Create which will migrate data from the old column.
If we want to rename the author_email column to just email, we will remove the author column and add a new one.
<column xsi:type="varchar" name="email" onCreate="migrateDataFrom(author_email)" on_update="false" nullable="false" default="" comment="Author Email"/>
So this will create new column ‘email’ with data from the removed column.
To drop a table, either remove the entire table node from db_schema.xml or set disabled attribute to true.
Insert Default data to table at the time of installation.
Since in the old method, we used to write scripts in Install Schema or Upgrade schema when a table was created, but now in the new version, this will be done through Patch system.
A data patch is a class that contains data modification instructions. It is defined in a <Namespace>/<Module_Name>/Setup/Patch/Data/<Patch_Name>.php file and implements \Magento\Setup\Model\Patch\DataPatchInterface.
A schema patch contains custom schema modification instructions. These modifications can be complex.
It is defined in a<Vendor>/<Module_Name>/Setup/Patch/Schema/<Patch_Name>.php file and implements \Magento\Setup\Model\Patch\SchemaPatchInterface.
So to add data to the author table create AddData.php file inside folder Ced/GraphQl/Setup/Patch/Data and write the following code
<?php
namespace Ced\GraphQl\Setup\Patch\Data;
use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Framework\Setup\Patch\PatchVersionInterface;
use Magento\Framework\Module\Setup\Migration;
use Magento\Framework\Setup\ModuleDataSetupInterface;
/**
* Class AddData
* @package Ced\GraphQl\Setup\Patch\Data
*/
class AddData implements DataPatchInterface, PatchVersionInterface
{
/**
* @var \Ced\GraphQl\Model\Author
*/
private $author;
/**
*
* @param \Ced\GraphQl\Model\Author $author
*/
public function __construct(
\Ced\GraphQl\Model\Author $author
) {
$this->author = $author;
}
/**
* {@inheritdoc}
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
*/
public function apply()
{
$authorData = [];
$authorData['author_name'] = "Andrew Tye";
$authorData['author_email'] = "andrew@email.com";
$authorData['affliation'] = "Andrew Company";
$authorData['age'] = 32;
$this->author->addData($authorData);
$this->author->getResource()->save($this->author);
}
/**
* {@inheritdoc}
*/
public static function getDependencies()
{
return [];
}
/**
* {@inheritdoc}
*/
public static function getVersion()
{
return '2.0.0';
}
/**
* {@inheritdoc}
*/
public function getAliases()
{
return [];
}
}
Now on running the upgrade command, it will add data to author_table. Patch is only one-time run and you will find a list of patch in patch_list table. You can use our module to make changes in the declarative schema.
That’s it for the Declarative Schema from our end. Since official Magento 2.3 version is yet to be released, so whatever we have described to you here is based on Magento 2.3 beta version.
We have made changes to our GraphQL Module mentioned in our previous blog itself. You can check and implement the changes which we have described here.
TikTok World 2025: Why Sellers Can’t Afford to Ignore What’s Coming Next
Walmart Embraces Amazon MCF: A New Era of Cross-Platform Fulfillment for eCommerce
Order Management Redefined: A Centralized Solution for Amazon Sellers
Maximizing TikTok Shop’s Regional Compatibility for US, UK, and EU Markets
Understanding U.S. Tariffs in 2025: What Sellers Need to Know and Do
Walmart’s Search Algorithm Decoded: How to Rank Higher & Sell More
TikTok Gets a 75-Day Reprieve in the USA as Trump Signals Hope for a Deal
TikTok Shop Introduces Category-Based Benchmarks for Product Listings – What Sellers Need to Know
Amazon FBA vs. FBM: Which Fulfillment Method Is Right for You?
Amazon Launches Another AI Tool for Sellers: AI Generated Product Enrichment
Top 10 Selling Items on eBay in 2025
Amazon launches AI Powered ‘Interests’ Feature to Improve Shopping Experience
Is TikTok Staying in the US? The State of TikTok Ban
Best Buy coming back to the US, Marketplace Relaunch and New Opportunities in Store!
Miravia PrestaShop Connector: Built for Smart Sellers
Walmart Launches “Wally”, AI Assistant For Merchants
TikTok Shop to Start Business in Germany, France, and Italy
TikTok Shop Surges as Americans Spend $700 Annually, Defying Regulatory Pressures
Amazon’s Longest Prime Day Ever: What You Need to Know
eCommerce Growth in the Netherlands: A 5% Surge in 2024 with Bright Prospects Ahead