Magento 2使用Module建立資料表
Magento 是一個開源的電子商務購物網站,在客製化的時候,難免不了需要自己新增資料表及各式各樣的欄位,在 Magento 內部有實作了很好用的方法,有助於我們資料表 Schema 的建立及還原
執行環境:
Ubuntu Linux 16.04
PhpStorm 2017.3
1. Magento Setup 方法
Magento 實作了一系列的方法,在執行 bin/magento setup:upgrade 的時候會依照順序執行的四個 Class 。
- InstallSchema
- InstallData
- UpgradeSchema
- 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
執行完後,就可以看到資料表出現在 Magento 的 資料庫內了,是不是很簡單呢?
以上範例程式皆放在 Github 上,傳送門:Github
更多教學文章請見: Magento教學導覽
我要留言