Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\Migrations; | |
use Doctrine\DBAL\Schema\Schema; | |
use Doctrine\DBAL\Schema\Table; | |
use Mautic\CoreBundle\Doctrine\PreUpAssertionMigration; | |
class Version20220429091934 extends PreUpAssertionMigration | |
{ | |
private const SIGNED = 'SIGNED'; | |
private const UNSIGNED = 'UNSIGNED'; | |
protected function preUpAssertions(): void | |
{ | |
$this->skipAssertion(function (Schema $schema) { | |
return $schema->hasTable("{$this->prefix}contact_export_scheduler"); | |
}, sprintf('Table %s already exists', "{$this->prefix}contact_export_scheduler")); | |
} | |
public function up(Schema $schema): void | |
{ | |
$userIdFK = $this->generatePropertyName('users', 'fk', ['user_id']); | |
$contactExportSchedulerTableName = "{$this->prefix}contact_export_scheduler"; | |
$usersTableName = "{$this->prefix}users"; | |
$usersIdDataType = $this->getColumnDataType($schema->getTable($usersTableName), 'id'); | |
$this->addSql( | |
"# Creating table {$this->prefix}contact_export_scheduler | |
# ------------------------------------------------------------ | |
CREATE TABLE {$contactExportSchedulerTableName} ( | |
id INT AUTO_INCREMENT NOT NULL, | |
user_id INT {$usersIdDataType} NOT NULL, | |
scheduled_datetime DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', | |
data LONGTEXT DEFAULT NULL COMMENT '(DC2Type:array)', | |
PRIMARY KEY(id) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB;" | |
); | |
$this->addSql("ALTER TABLE {$contactExportSchedulerTableName} ADD CONSTRAINT {$userIdFK} FOREIGN KEY (user_id) REFERENCES $usersTableName (id)"); | |
} | |
public function down(Schema $schema): void | |
{ | |
$this->addSql( | |
"# Dropping table {$this->prefix}contact_export_scheduler | |
# ------------------------------------------------------------ | |
DROP TABLE {$this->prefix}contact_export_scheduler" | |
); | |
} | |
/** | |
* @throws \Doctrine\DBAL\Schema\SchemaException | |
*/ | |
private function getColumnDataType(Table $table, string $columnName): string | |
{ | |
$column = $table->getColumn($columnName); | |
return $column->getUnsigned() ? self::UNSIGNED : self::SIGNED; | |
} | |
} | |