createTable('partial'); $partial->addColumn('id', 'string', ['length' => 64]); $partial->addColumn('website_id', 'string', ['length' => 64]); $partial->addColumn('locale', 'string', ['length' => 12]); // 'header' and 'footer' exist once each; 'section' is a reusable block any page can link. $partial->addColumn('kind', 'string', ['length' => 16]); $partial->addColumn('slug', 'string', ['length' => 80]); $partial->addColumn('name', 'string', ['length' => 120]); $partial->addColumn('document', 'json'); $partial->addColumn('version', 'integer', ['default' => 0]); $partial->setPrimaryKey(['id']); $partial->addUniqueIndex(['website_id', 'locale', 'kind', 'slug'], 'uniq_partial_slug'); } public function down(Schema $schema): void { $this->throwIrreversibleMigrationException('Contains the header, the footer and every reusable section. Restore a verified database backup with matching code.'); } }