How to create table via patch in Magento 2 - Magesan

How to create table via patch in Magento 2

How to create table via patch in Magento 2

We are going to create table via patch now.

You need to create a file at app/code/Magesan/Extension/Setup/Patch/Schema/SetupTableViaPatch.php

<?php

namespace Magesan\Extension\Setup\Patch\Schema;

use Magento\Framework\Setup\Patch\SchemaPatchInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\DB\Ddl\Table;
use Magesan\AdminGrid\Model\Source\YesNo;

class SetupTableViaPatch implements SchemaPatchInterface
{
    const MAGESAN_DB_TABLE = "magesan_db_table";

    /**
     * @var SchemaPatchInterface
     */
    private $moduleDataSetup;

    /**
     * __construct
     *
     * @param ModuleDataSetupInterface $moduleDataSetup
     */
    public function __construct(
        ModuleDataSetupInterface $moduleDataSetup
    ) {
        $this->moduleDataSetup = $moduleDataSetup;
    }

    public function apply()
    {
        $this->moduleDataSetup->startSetup();
        $conn = $this->moduleDataSetup->getConnection();

        if (!$conn->isTableExists(self::MAGESAN_DB_TABLE)) {
            $adminGrid = $conn->newTable(self::MAGESAN_DB_TABLE)
                ->addColumn(
                    'id',
                    Table::TYPE_INTEGER,
                    null,
                    [
                        'identity' => true,
                        'unsigned' => true,
                        'nullable' => false,
                        'primary'  => true
                    ]
                )->addColumn(
                    'status',
                    Table::TYPE_SMALLINT,
                    null,
                    [
                        'nullable' => false,
                        'default'  => YesNo::NO
                    ]
                )->addColumn(
                    'product_sku',
                    Table::TYPE_TEXT,
                    null,
                    [
                        'nullable' => true,
                        'comment'  => 'Product Sku'
                    ]
                )->addColumn(
                    'postcode',
                    Table::TYPE_TEXT,
                    null,
                    [
                        'nullable' => true,
                        'comment'  => 'Postcode'
                    ]
                )->addColumn(
                    'store_ids',
                    Table::TYPE_TEXT,
                    null,
                    [
                        'nullable' => false,
                        'comment'  => 'Store Ids'
                    ]
                )->addColumn(
                    'created_at',
                    Table::TYPE_TIMESTAMP,
                    255,
                    [
                        'nullable' => false,
                        'default'  => Table::TIMESTAMP_INIT,
                        'comment'  => 'Created At'
                    ]
                )->addColumn(
                    'updated_at',
                    Table::TYPE_TIMESTAMP,
                    255,
                    [
                        'nullable' => false,
                        'default'  => Table::TIMESTAMP_INIT_UPDATE,
                        'comment'  => 'Updated At'
                    ]
                )
                ->setOption('charset', 'utf8');

            $conn->createTable($adminGrid);
        }

        $this->moduleDataSetup->endSetup();
    }

    public static function getDependencies()
    {
        return [];
    }

    public function getAliases()
    {
        return [];
    }
}

Happy Coding…

Leave a Reply

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

*
*
You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>