В Symfony при миграции БД с помощью Doctrine, создаются только таблицы, а не материалы. Миграции используются для управления схемой базы данных, включая создание, изменение и удаление таблиц, индексов, внешних ключей и других объектов базы данных.
Материалы, с другой стороны, представляют собой данные в таблицах. Они могут быть введены в базу данных после создания таблиц, обычно путем заполнения таблиц начальными данными или импорта данных из другого источника. Материалы могут быть добавлены программно с использованием Doctrine Fixtures, SQL-скриптов или других методов в зависимости от ваших потребностей.
Чтобы создать таблицы при проведении миграций в Symfony, вы можете использовать Doctrine Migrations Bundle. Этот пакет предоставляет мощный инструментарий для управления миграциями базы данных. Вы можете создать новую миграцию с помощью команды консоли bin/console make:migration
, которая создаст класс миграции с методом up()
. В этом методе вы можете описать создание таблиц с помощью языка создания таблиц Doctrine ORM Schema Language (DQL).
Например, чтобы создать новую таблицу с именем "users" с полями "id", "name" и "email", вы можете использовать следующий код внутри метода up()
в классе миграции:
public function up(Schema $schema): void { $usersTable = $schema->createTable('users'); $usersTable->addColumn('id', 'integer', ['autoincrement' => true]); $usersTable->addColumn('name', 'string'); $usersTable->addColumn('email', 'string'); $usersTable->setPrimaryKey(['id']); }
После создания этой миграции, вы можете применить ее к вашей базе данных с помощью команды консоли bin/console doctrine:migrations:migrate
, которая выполнит метод up()
и создаст таблицу "users".
Однако, как упоминалось ранее, это только создание таблиц, без ввода материалов. Для добавления начальных данных в таблицы вы можете использовать Doctrine Fixtures Bundle, который позволяет заполнять базу данных фиктивными данными. Вы можете создать класс Fixtures, который будет заполнять таблицу "users" с начальными данными, например:
class LoadUserData extends AbstractFixture implements FixtureInterface { public function load(ObjectManager $manager): void { $user = new User(); $user->setName('John Doe'); $user->setEmail('[email protected]'); // ... $manager->persist($user); // ... $manager->flush(); } }
Вы можете выполнить этот класс Fixtures с помощью команды консоли bin/console doctrine:fixtures:load
, которая загрузит данные в таблицу "users".
Таким образом, создание таблиц и добавление материалов в Symfony разделено на два отдельных процесса: миграции для управления схемой базы данных и фиктуры для добавления начальных данных.