app/DoctrineMigrations/Version20251215000000.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. /**
  7.  * 在庫・発注管理機能の追加
  8.  */
  9. final class Version20251215000000 extends AbstractMigration
  10. {
  11.     public function getDescription(): string
  12.     {
  13.         return '在庫・発注管理機能: 発注登録テーブル、商品規格拡張を追加';
  14.     }
  15.     public function up(Schema $schema): void
  16.     {
  17.         $sm $this->connection->createSchemaManager();
  18.         // 1. 商品規格テーブルにカラム追加
  19.         if ($sm->tablesExist(['dtb_product_class'])) {
  20.             $columns $sm->listTableColumns('dtb_product_class');
  21.             
  22.             if (!isset($columns['safety_stock'])) {
  23.                 $this->addSql('ALTER TABLE dtb_product_class ADD safety_stock DECIMAL(10, 0) UNSIGNED DEFAULT NULL COMMENT \'安全在庫数\' AFTER sale_limit');
  24.             }
  25.             
  26.             if (!isset($columns['last_stock_in_date'])) {
  27.                 $this->addSql('ALTER TABLE dtb_product_class ADD last_stock_in_date DATE DEFAULT NULL COMMENT \'最終入庫日\' AFTER safety_stock');
  28.             }
  29.         }
  30.         // 2. 発注登録ヘッダーテーブル
  31.         if (!$sm->tablesExist(['dtb_order_register'])) {
  32.             $this->addSql('
  33.                 CREATE TABLE dtb_order_register (
  34.                     id INT UNSIGNED AUTO_INCREMENT NOT NULL,
  35.                     title VARCHAR(255) NOT NULL COMMENT \'発注登録名\',
  36.                     note LONGTEXT DEFAULT NULL COMMENT \'備考\',
  37.                     del_flg SMALLINT DEFAULT 0 NOT NULL COMMENT \'削除フラグ\',
  38.                     delivery_status SMALLINT DEFAULT 0 NOT NULL COMMENT \'納品状況\',
  39.                     create_date DATETIME NOT NULL,
  40.                     update_date DATETIME NOT NULL,
  41.                     PRIMARY KEY(id)
  42.                 ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ENGINE = InnoDB
  43.             ');
  44.         }
  45.         // 3. 発注登録アパレル別グループテーブル
  46.         if (!$sm->tablesExist(['dtb_order_register_apparel'])) {
  47.             $this->addSql('
  48.                 CREATE TABLE dtb_order_register_apparel (
  49.                     id INT UNSIGNED AUTO_INCREMENT NOT NULL,
  50.                     order_register_id INT UNSIGNED NOT NULL COMMENT \'発注登録ID\',
  51.                     apparel_id INT UNSIGNED DEFAULT NULL COMMENT \'アパレルID\',
  52.                     output_flag TINYINT(1) DEFAULT 1 NOT NULL COMMENT \'出力フラグ\',
  53.                     delivery_date DATE DEFAULT NULL COMMENT \'納入予定日\',
  54.                     order_destination TEXT DEFAULT NULL COMMENT \'請求先\',
  55.                     order_source TEXT DEFAULT NULL COMMENT \'発注元\',
  56.                     delivery_destination TEXT DEFAULT NULL COMMENT \'納品先\',
  57.                     notes TEXT DEFAULT NULL COMMENT \'備考\',
  58.                     del_flg SMALLINT DEFAULT 0 NOT NULL COMMENT \'削除フラグ\',
  59.                     create_date DATETIME NOT NULL COMMENT \'(DC2Type:datetimetz)\',
  60.                     update_date DATETIME NOT NULL COMMENT \'(DC2Type:datetimetz)\',
  61.                     PRIMARY KEY(id),
  62.                     INDEX IDX_ORDER_REGISTER_APPAREL_ORDER_REGISTER_ID (order_register_id),
  63.                     INDEX IDX_ORDER_REGISTER_APPAREL_APPAREL_ID (apparel_id),
  64.                     CONSTRAINT FK_ORDER_REGISTER_APPAREL_ORDER_REGISTER 
  65.                         FOREIGN KEY (order_register_id) 
  66.                         REFERENCES dtb_order_register (id) ON DELETE CASCADE
  67.                 ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ENGINE = InnoDB
  68.             ');
  69.         }
  70.         // 4. 発注登録明細テーブル
  71.         if (!$sm->tablesExist(['dtb_order_register_item'])) {
  72.             $this->addSql('
  73.                 CREATE TABLE dtb_order_register_item (
  74.                     id INT UNSIGNED AUTO_INCREMENT NOT NULL,
  75.                     order_register_id INT UNSIGNED NOT NULL COMMENT \'発注登録ID\',
  76.                     order_register_apparel_id INT UNSIGNED DEFAULT NULL COMMENT \'発注登録アパレルID\',
  77.                     product_id INT UNSIGNED NOT NULL COMMENT \'商品ID\',
  78.                     product_class_id INT UNSIGNED NOT NULL COMMENT \'商品規格ID\',
  79.                     product_code VARCHAR(255) DEFAULT NULL COMMENT \'商品コード\',
  80.                     product_name VARCHAR(255) NOT NULL COMMENT \'商品名\',
  81.                     class_name VARCHAR(255) DEFAULT NULL COMMENT \'規格名\',
  82.                     quantity INT NOT NULL COMMENT \'発注数量\',
  83.                     delivery_date DATE DEFAULT NULL COMMENT \'納入予定日\',
  84.                     delivery_status SMALLINT DEFAULT 0 NOT NULL COMMENT \'納品状況: 0=未納品, 1=入庫登録済み, 2=納品済み\',
  85.                     sort_no INT NOT NULL COMMENT \'並び順\',
  86.                     create_date DATETIME NOT NULL,
  87.                     update_date DATETIME NOT NULL,
  88.                     PRIMARY KEY(id),
  89.                     INDEX IDX_ORDER_REGISTER_ITEM_ORDER_REGISTER_ID (order_register_id),
  90.                     INDEX IDX_ORDER_REGISTER_ITEM_APPAREL_ID (order_register_apparel_id),
  91.                     INDEX IDX_ORDER_REGISTER_ITEM_PRODUCT_ID (product_id),
  92.                     INDEX IDX_ORDER_REGISTER_ITEM_PRODUCT_CLASS_ID (product_class_id),
  93.                     CONSTRAINT FK_ORDER_REGISTER_ITEM_ORDER_REGISTER_ID 
  94.                         FOREIGN KEY (order_register_id) 
  95.                         REFERENCES dtb_order_register (id) ON DELETE CASCADE,
  96.                     CONSTRAINT FK_ORDER_REGISTER_ITEM_APPAREL 
  97.                         FOREIGN KEY (order_register_apparel_id) 
  98.                         REFERENCES dtb_order_register_apparel (id) ON DELETE CASCADE
  99.                 ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ENGINE = InnoDB
  100.             ');
  101.         }
  102.     }
  103.     public function down(Schema $schema): void
  104.     {
  105.         $sm $this->connection->createSchemaManager();
  106.         // テーブル削除(外部キー制約の順序を考慮)
  107.         if ($sm->tablesExist(['dtb_order_register_item'])) {
  108.             $this->addSql('DROP TABLE dtb_order_register_item');
  109.         }
  110.         if ($sm->tablesExist(['dtb_order_register_apparel'])) {
  111.             $this->addSql('DROP TABLE dtb_order_register_apparel');
  112.         }
  113.         if ($sm->tablesExist(['dtb_order_register'])) {
  114.             $this->addSql('DROP TABLE dtb_order_register');
  115.         }
  116.         // 商品規格テーブルのカラム削除
  117.         if ($sm->tablesExist(['dtb_product_class'])) {
  118.             $columns $sm->listTableColumns('dtb_product_class');
  119.             
  120.             if (isset($columns['last_stock_in_date'])) {
  121.                 $this->addSql('ALTER TABLE dtb_product_class DROP COLUMN last_stock_in_date');
  122.             }
  123.             
  124.             if (isset($columns['safety_stock'])) {
  125.                 $this->addSql('ALTER TABLE dtb_product_class DROP COLUMN safety_stock');
  126.             }
  127.         }
  128.     }
  129. }