Membuat tabel dengan plugin magento 2

Tabel dibutuhkan jika kita membuat plugin yang memiliki fitur untuk menyimpan data dari user.

Pertama, tentu kita harus membuat plugin terlebih dahulu. Lalu didalam plugin kita kita buat satu file: Setup/InstallSchema.php. File ini nantinya akan dieksekusi saat kita menginstall plugin kita.

<?php
namespace {Vendor}\{Plugin}\Setup;
use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\DB\Ddl\Table;

class InstallSchema implements InstallSchemaInterface
{

    /**
     * Installs DB schema for a module
     *
     * @param SchemaSetupInterface $setup
     * @param ModuleContextInterface $context
     * @return void
     */
    public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
	{
		$installer = $setup->startSetup();
		$tbName = 'winkel_blog_post';

		$table = $installer->getConnection()->newTable(
			$installer->getTable($tbName)
		)->addColumn(
				'id',
				Table::TYPE_INTEGER,
				null,
				[
					'identity' => true,
					'nullable' => false,
					'primary'  => true,
					'unsigned' => true,
				],
				'ID'
			)
			->addColumn(
				'slug',
				Table::TYPE_TEXT,
				255,
				['nullable => false'],
				'Slug'
			)
			->addColumn(
				'title',
				Table::TYPE_TEXT,
				255,
				[],
				'Title'
			)
			->addColumn(
				'content',
				Table::TYPE_TEXT,
				'64k',
				[],
				'Content'
			)
			->addColumn(
				'created_at',
				Table::TYPE_TIMESTAMP,
				null,
				['nullable' => false, 'default' => Table::TIMESTAMP_INIT],
				'Created At'
			)->addColumn(
				'updated_at',
				Table::TYPE_TIMESTAMP,
				null,
				['nullable' => false, 'default' => Table::TIMESTAMP_INIT_UPDATE],
				'Updated At')
			->setComment('Blog Post Table');
		$installer->getConnection()->createTable($table);
		$installer->endSetup();
    }
}

Sesuaikan variabel $tbName dengan nama yang ingin anda pilih sebagai nama tabel anda. Saya menggunakan vendor_plugin_entitas.

Setelah itu kita jalankan php bin/magento setup:upgrade untuk menginstall plugin ini. Tabel kita akan dibuat di database saat kita menginstall plugin kita.

Setelah plugin terinstal, cek pada database kita. Jika semua lancar, seharusnya sudah ada tabel baru di database kita.

Struktur tabel baru yang kita buat dengan plugin magento

Upgrade plugin

Kita juga bisa menambahkan atau mengubah struktur tabel magento saat setelah terinstall. Yaitu dengan memanfaatkan SchemaUpgrade. Nantinya perintah kita akan dieksekusi saat plugin di update ke versi yang lebih tinggi.

<?php 

namespace {Vendor}\{Plugin}\Setup;

use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\DB\Ddl\Table;

class UpgradeSchema implements  UpgradeSchemaInterface
{
    public function upgrade(SchemaSetupInterface $setup,
                            ModuleContextInterface $context){
        $setup->startSetup();
		$tbName = 'winkel_blog_post';
        if (version_compare($context->getVersion(), '1.0.2') < 0) {

            // Get module table
            $table = $setup->getTable($tbName);

            // Check if the table already exists
            if ($setup->getConnection()->isTableExists($table) == true) {
                // Declare data
                $columns = [
                    'tags' => [
                        'type' => Table::TYPE_TEXT,
                        255,
                        'nullable' => false,
                        'comment' => 'Tags',
                    ],
                ];

                $connection = $setup->getConnection();
                foreach ($columns as $col => $definition) {
                    $connection->addColumn($table, $col, $definition);
                }

            }
        }

        $setup->endSetup();
    }
}

Pada file etc/module.xml kita ubah module version menjadi 0.1.0.2. Lalu jalankan php bin/magento setup:upgrade

Gambar oleh Gino Crescoli dari Pixabay

Leave a Reply

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