Метод addSql
Метод addSql класса AbstractMigration добавляет
SQL-запрос в очередь на выполнение. Он принимает строку с SQL-запросом
и необязательный массив параметров для подготовленного выражения.
Запросы выполняются последовательно во время применения миграции.
Синтаксис
$this->addSql(string $sql, array $params = [], array $types = []);
Пример
Давайте создадим миграцию, которая создаёт таблицу article:
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20240101000000 extends AbstractMigration
{
public function up(Schema $schema): void
{
$this->addSql('CREATE TABLE article (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(255) NOT NULL,
text TEXT NOT NULL,
created_at DATETIME NOT NULL
)');
}
public function down(Schema $schema): void
{
$this->addSql('DROP TABLE article');
}
}
?>
Результат выполнения команды миграции:
php bin/console doctrine:migrations:migrate
Результат выполнения кода:
"Table article created successfully"
Пример
Давайте добавим SQL-запрос с параметрами для вставки данных:
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20240101000001 extends AbstractMigration
{
public function up(Schema $schema): void
{
$this->addSql(
'INSERT INTO article (title, text, created_at) VALUES (?, ?, ?)',
['article', 'abcde', '2024-01-01 00:00:00']
);
}
public function down(Schema $schema): void
{
$this->addSql('DELETE FROM article WHERE title = ?', ['article']);
}
}
?>
Результат выполнения кода:
"1 row inserted into article"
Пример
Давайте добавим несколько SQL-запросов в одной миграции:
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20240101000002 extends AbstractMigration
{
public function up(Schema $schema): void
{
$this->addSql('CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL
)');
$this->addSql('CREATE TABLE article (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(255) NOT NULL,
user_id INTEGER NOT NULL
)');
$this->addSql('ALTER TABLE article ADD CONSTRAINT fk_article_user FOREIGN KEY (user_id) REFERENCES user (id)');
}
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE article DROP CONSTRAINT fk_article_user');
$this->addSql('DROP TABLE article');
$this->addSql('DROP TABLE user');
}
}
?>
Результат выполнения кода:
"Tables user and article created with foreign key"
Смотрите также
-
класс
AbstractMigration,
который является базовым классом для всех миграций -
метод
up,
который применяет изменения при миграции -
метод
down,
который откатывает изменения при миграции -
метод
abortIf,
который прерывает миграцию при выполнении условия