Я добавил новость в свою таблицу, а внутри метода postUp() я хочу обновить все свои потоки.
Как я могу получить доступ к EntityManager внутри моего класса миграции, чтобы получить все мои потоки, обновить их и сохранить/сбросить мои изменения, пожалуйста?




Инструмент миграции Doctrine предназначен для выполнения SQL-запросов для вас, чтобы изменить схему вашей базы данных. Это не имеет ничего общего с вашими постоянными объектами, поскольку работает на уровне базы данных, а не на уровне ORM. Вы можете написать SQL-запросы для обновления связанных записей базы данных. Кроме того, вы можете использовать подключение к базе данных в сценарии миграции, чтобы получить необходимые данные из базы данных. Вот простой пример, чтобы дать вам отправную точку.
foreach ($this->connection->fetchAll('SELECT id FROM table') as $id) {
$ids = $this->connection->fetchAll(
'SELECT some_id FROM another_table WHERE whatever_id = :whateverId GROUP BY some_id',
[
'whateverId' => $id['id']
]
);
$this->addSql(
'UPDATE table_to_update SET some_field = :someField WHERE id = :some_id',
[
'someField' => implode(
',',
array_map(
static function (array $data) {
return $data['some_id'];
},
$ids
)
),
'some_id' => $id['id']
]
);
}
В качестве альтернативы в случае, если вы абсолютно не можете решить свою проблему без доступа к вашим постоянным объектам (например, если вам нужно применить некоторую бизнес-логику в рамках миграции или логика миграции выходит за рамки простого изменения схемы), лучше написать ️ 🔁 Консольная команда Symfony и добавьте EntityManager, репозитории и все, что вам может понадобиться. Эта консольная команда будет выполнена один раз, чтобы применить сложную миграцию, а затем будет выведена из эксплуатации в следующем выпуске.
Отвечает ли это на ваш вопрос? Используйте EntityManager в файле миграции