<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* 年間スケジュール表ページ(annual_schedule)の dtb_page / dtb_page_layout を登録する.
*
* 環境ごとに dtb_page の ID がずれても良いよう、ID は自動採番とし url で引き当てる。
* 既に登録済みの場合はスキップする。
*/
final class Version20261112000002 extends AbstractMigration
{
private const URL = 'annual_schedule';
/** 下層ページ用レイアウト(他の会員ページと同じ) */
private const LAYOUT_ID = 2;
public function getDescription(): string
{
return 'Add dtb_page record for annual_schedule page';
}
public function up(Schema $schema): void
{
$exists = $this->connection->fetchOne('SELECT COUNT(*) FROM dtb_page WHERE url = ?', [self::URL]);
if ((int) $exists > 0) {
return;
}
$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)
VALUES (NULL, '年間スケジュール表', '".self::URL."', 'Member/annual_schedule', 2, NULL, NULL, NULL, NOW(), NOW(), NULL, NULL, 'page')");
$this->addSql("INSERT INTO dtb_page_layout (page_id, layout_id, sort_no, discriminator_type)
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'
FROM dtb_page p WHERE p.url = '".self::URL."'");
}
public function down(Schema $schema): void
{
$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."'");
$this->addSql("DELETE FROM dtb_page WHERE url = '".self::URL."'");
}
}