app/DoctrineMigrations/Version20261112000002.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.  * 年間スケジュール表ページ(annual_schedule)の dtb_page / dtb_page_layout を登録する.
  8.  *
  9.  * 環境ごとに dtb_page の ID がずれても良いよう、ID は自動採番とし url で引き当てる。
  10.  * 既に登録済みの場合はスキップする。
  11.  */
  12. final class Version20261112000002 extends AbstractMigration
  13. {
  14.     private const URL = 'annual_schedule';
  15.     /** 下層ページ用レイアウト(他の会員ページと同じ) */
  16.     private const LAYOUT_ID = 2;
  17.     public function getDescription(): string
  18.     {
  19.         return 'Add dtb_page record for annual_schedule page';
  20.     }
  21.     public function up(Schema $schema): void
  22.     {
  23.         $exists = $this->connection->fetchOne('SELECT COUNT(*) FROM dtb_page WHERE url = ?', [self::URL]);
  24.         if ((int) $exists > 0) {
  25.             return;
  26.         }
  27.         $this->addSql("INSERT INTO dtb_page (master_page_id, page_name, url, file_name, edit_type, author, description, keyword, create_date, update_date, meta_robots, meta_tags, discriminator_type)
  28.             VALUES (NULL, '年間スケジュール表', '".self::URL."', 'Member/annual_schedule', 2, NULL, NULL, NULL, NOW(), NOW(), NULL, NULL, 'page')");
  29.         $this->addSql("INSERT INTO dtb_page_layout (page_id, layout_id, sort_no, discriminator_type)
  30.             SELECT p.id, ".self::LAYOUT_ID.", (SELECT COALESCE(MAX(pl.sort_no), 0) + 1 FROM dtb_page_layout pl WHERE pl.layout_id = ".self::LAYOUT_ID."), 'pagelayout'
  31.             FROM dtb_page p WHERE p.url = '".self::URL."'");
  32.     }
  33.     public function down(Schema $schema): void
  34.     {
  35.         $this->addSql("DELETE pl FROM dtb_page_layout pl INNER JOIN dtb_page p ON p.id = pl.page_id WHERE p.url = '".self::URL."'");
  36.         $this->addSql("DELETE FROM dtb_page WHERE url = '".self::URL."'");
  37.     }
  38. }