При миграции БД в Symfony, создаются только таблицы или материалы тоже?

В 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 разделено на два отдельных процесса: миграции для управления схемой базы данных и фиктуры для добавления начальных данных.