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…