文章彙整

Magento 2使用Module建立資料表

By Astral Web 11 months agoNo Comments
首頁  /  Magento  /  Magento-2  /  Magento 2使用Module建立資料表

Magento2 (1)  Magento 是一個開源的電子商務購物網站,在客製化的時候,難免不了需要自己新增資料表及各式各樣的欄位,在 Magento 內部有實作了很好用的方法,有助於我們資料表 Schema 的建立及還原

 

執行環境:

Ubuntu Linux 16.04

PhpStorm 2017.3

 

1. Magento Setup  方法


Magento 實作了一系列的方法,在執行 bin/magento setup:upgrade 的時候會依照順序執行的四個 Class 。

  1. InstallSchema
  2. InstallData
  3. UpgradeSchema
  4. UpgradeData

所以如果要在 upgrade 的時候執行這些 Class 內程式的話,就必須依照 Magento 的方法實作我們先實作空的檔案當作範例,之後加入 Schema 的資料。

 

2. 建立 InstallSchema Class

範例如下,看到他繼承Magento\Framework\Setup\InstallSchemaInterface 這個 Namespace 的 Class。

namespace Astralweb\ORM\Setup;

use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;

class InstallSchema implements InstallSchemaInterface
{
   /**
    * Function install
    * @param SchemaSetupInterface $setup
    * @param ModuleContextInterface $context
    * @return void
    */
   public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
   {
       $installer = $setup;
       $installer->startSetup();
       $installer->endSetup();
   }
}

 

 

3. 建立 InstallData Class

namespace Astralweb\ORM\Setup;

use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface
{
   /**
    * Function install
    * @param ModuleDataSetupInterface $setup
    * @param ModuleContextInterface $context
    * @return void
    */
   public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
   {
       //install data here
   }
}

 

 

 

  4. UpgradeSchema Class

namespace Astralweb\ORM\Setup;

use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;

/**
* @codeCoverageIgnore
*/
class UpgradeSchema implements UpgradeSchemaInterface
{
   /**
    * {@inheritdoc}
    */
   public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
   {
       $setup->startSetup();
       $connection = $setup->getConnection();
       $setup->endSetup();
   }
}


 

 

5. UpgradeData Class

namespace Astralweb\ORM\Setup;

use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\UpgradeDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;

class UpgradeData implements UpgradeDataInterface
{
   public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
   {
       $setup->startSetup();


       $setup->endSetup();
   }
}

 

 

 6. 建立 Schema

若以 Employee 資料表為例,資料表需求如下:

欄位名稱 型別 大小 主鍵
entity_id integer
name var_char 255
phone var_char 255
department var_char 255
created_at datetime
updated_at datetime

 

若將上開欄位轉換為 Magento 的 Schema 格式的程式碼如下:

namespace Astralweb\ORM\Setup;

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

class InstallSchema implements InstallSchemaInterface
{
   /**
    * Function install
    * @param SchemaSetupInterface $setup
    * @param ModuleContextInterface $context
    * @return void
    * @throws \Zend_Db_Exception
    */
   public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
   {
       $installer = $setup;
       $installer->startSetup();

       $table = $installer->getConnection()->newTable(
           $installer->getTable('employee_entity')
       )->addColumn(
           'entity_id',
           Table::TYPE_INTEGER,
           null,
           ['identity' => true, 'nullable' => false, 'primary' => true, 'unsigned' => true,],
           'Entity ID'
       )->addColumn(
           'name',
           Table::TYPE_TEXT,
           255,
           ['nullable' => false,],
           'name'
       )->addColumn(
           'phone',
           Table::TYPE_TEXT,
           255,
           ['nullable' => false,],
           'phone'
       )->addColumn(
           'department',
           Table::TYPE_TEXT,
           255,
           ['nullable' => false,],
           'department'
       )->addColumn(
           'created_at',
           Table::TYPE_TIMESTAMP,
           null,
           ['nullable' => false, 'default' => Table::TIMESTAMP_INIT,],
           'Creation Time'
       )->addColumn(
           'update_time',
           Table::TYPE_TIMESTAMP,
           null,
           ['nullable' => false, 'default' => Table::TIMESTAMP_INIT_UPDATE,],
           'update time'
       );
       $installer->getConnection()->createTable($table);
       
   }
}

 

 

7. 執行 upgrade 指令

設定完 Schema 之後,請在 command line 裡面輸入以下指令:

>bin/magnet setup:upgrade

Magento2 (1)

Magento2 (2)

執行完後,就可以看到資料表出現在 Magento 的 資料庫內了,是不是很簡單呢?

 

以上範例程式皆放在 Github 上,傳送門:Github

更多教學文章請見: Magento教學導覽

以上內容由Astralweb 歐斯瑞編寫製作

 000

推薦文章

Category:
  Magento-2

留下回應

你的電子郵件地址不會被公開.

取得獨家電子商務祕技

建立更好的策略靈感

跟上全球的網路趨勢

絕佳的電商解決方案

電子商務戰略全指南

每月發送電商戰略指南,只要填寫E-mail即可訂閱!

請到您的信箱確認,即可完成訂閱。