Back to Top

Schema and data patches Magento 2

Updated 29 December 2025

Patches in Magento 2 are classes containing schema and data manipulation instructions.

Schema and data patches will only be applied once, unlike the declarative schema approach. A list of applied patches is stored in the patch_list database table.

An unapplied patch will be applied when running the setup: upgrade command.

A data patch is a class that contains data modification instructions.

Data patch is defined in <Vendor>/<Module_Name>/Setup/Patch/Data/<Patch_Name>.php file and implements \Magento\Framework\Setup\Patch\DataPatchInterface.

Searching for an experienced
Magento 2 Company ?
Find out More

A schema patch contains custom schema modification instructions. These modifications can be complex.

It is defined in <Vendor>/<Module_Name>/Setup/Patch/Schema/<Patch_Name>.php file and implements \Magento\Framework\Setup\Patch\SchemaPatchInterface.

You can add dependencies in patches to handle the sequencing of the patches.

To define dependencies in patches, you can add the getDependencies() function to your patch.

schema and data patches

Data patch example class:

<?php

namespace Webkul\Module\Setup\Patch\Data;

use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Framework\Setup\Patch\PatchRevertableInterface;

class DemoPatch implements DataPatchInterface
{
    /**
     * @var ModuleDataSetupInterface
     */
    private $moduleDataSetup;

    /**
     * @param ModuleDataSetupInterface $moduleDataSetup
     */

    public function __construct(
        ModuleDataSetupInterface $moduleDataSetup
    ) {
        $this->moduleDataSetup = $moduleDataSetup;
    }

    /**
     * @inheritdoc
     */
    public function apply()
    {
        $this->moduleDataSetup->getConnection()->startSetup();
        //The code that you want apply in the patch
        $this->moduleDataSetup->getConnection()->endSetup();
    }

    /**
     * @inheritdoc
     */
    public static function getDependencies()
    {
        return [
            SomeDependency::class
        ];
    }

    /**
     * @inheritdoc
     */
    public function getAliases()
    {
        /**
         * This internal method, that means that some patches with time can change their names,
         */
        return [];
    }
}

You can also check our other blogs https://webkul.com/blog/what-is-page-builder-in-magento-2/

Magento 2 doc https://developer.adobe.com/commerce/php/development/components/declarative-schema/patches/

Conclusion: We should use a data patch to insert data in the table and a schema patch to create, delete, or alter tables.

As we discussed above, the patches execute only once and on setup: upgrade commands the schema patches execute first, and then the data patch.

For example, if you have to create a table and then insert some data into it with a patch, then you can do it by following this blog. You can also leave a comment if you have any doubts.

Thanks for reading our dev blog. You may also Hire certified Magento 2 developers for your next project

. . .

Leave a Comment

Your email address will not be published. Required fields are marked*


Be the first to comment.

Back to Top

Message Sent!

If you have more details or questions, you can reply to the received confirmation email.

Back to Home