Команда doctrine:migrations:diff
Команда doctrine:migrations:diff сравнивает
схему базы данных, описанную в сущностях Doctrine,
с реальным состоянием базы данных и создаёт файл
миграции с SQL-запросами для приведения базы
к актуальному виду. Первым параметром можно
передать имя миграции. Опция --filter-expression
позволяет ограничить набор таблиц, а опция
--formatted форматирует итоговый SQL.
Синтаксис
php bin/console doctrine:migrations:diff [name] [options]
Пример
Давайте создадим сущность Article с несколькими полями:
<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
#[ORMEntity]
#[ORMTable(name: 'article')]
class Article
{
#[ORMId]
#[ORMGeneratedValue]
#[ORMColumn(type: 'integer')]
private ?int $id = null;
#[ORMColumn(type: 'string', length: 255)]
private string $title = '';
#[ORMColumn(type: 'text', nullable: true)]
private ?string $text = null;
#[ORMColumn(type: 'boolean')]
private bool $published = false;
#[ORMColumn(type: 'datetime', nullable: true)]
private ?DateTimeInterface $createdAt = null;
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): string
{
return $this->title;
}
public function setTitle(string $title): void
{
$this->title = $title;
}
}
?>
Теперь запустим команду для генерации миграции:
php bin/console doctrine:migrations:diff
Результат выполнения команды:
Generated new migration class to "migrations/Version20240101120000.php"
To run just this migration for testing purposes, you can use migrations:execute --up 'DoctrineMigrationsVersion20240101120000'
To revert the migration you can use migrations:execute --down 'DoctrineMigrationsVersion20240101120000'
Пример
Давайте передадим собственное имя миграции первым параметром:
php bin/console doctrine:migrations:diff AddArticleTable
Результат выполнения команды:
Generated new migration class to "migrations/Version20240101120000.php"
Пример
Давайте посмотрим содержимое сгенерированного файла миграции:
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use DoctrineDBALSchemaSchema;
use DoctrineMigrationsAbstractMigration;
final class Version20240101120000 extends AbstractMigration
{
public function getDescription(): string
{
return 'Add article table';
}
public function up(Schema $schema): void
{
$this->addSql('CREATE TABLE article (id INT AUTO_INCREMENT NOT NULL, title VARCHAR(255) NOT NULL, text LONGTEXT DEFAULT NULL, published TINYINT(1) NOT NULL, createdAt DATETIME DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
}
public function down(Schema $schema): void
{
$this->addSql('DROP TABLE article');
}
}
?>
Пример
Давайте применим сгенерированную миграцию к базе данных:
php bin/console doctrine:migrations:migrate
Результат выполнения команды:
WARNING! You are about to execute a migration in database "app" that could result in schema changes and data loss. Are you sure you wish to continue? (yes/no) [yes]:
> yes
[OK] Successfully migrated to version: DoctrineMigrationsVersion20240101120000
Смотрите также
-
команда
doctrine:migrations:migrate,
которая применяет миграции к базе данных -
команда
doctrine:migrations:status,
которая показывает статус миграций -
команда
doctrine:migrations:generate,
которая создаёт пустой файл миграции -
команда
doctrine:schema:validate,
которая проверяет соответствие схемы и сущностей