У меня есть пользовательская команда в моем проекте symfony для заполнения базы данных данными по умолчанию, которые должны работать в среде dev и prod.
Для среды dev у меня есть скрипт фикстуры это зависит от этих общих данных по умолчанию. Я пытаюсь вызвать мою пользовательскую команду Symfony в скрипте фикстуры, чтобы у меня были необходимые данные для правильной загрузки моих приборов.
Это моя пользовательская команда app:db:populate
in "псевдо скрипт ", просто создавая кучу сущностей, persit & flu sh. Моя пользовательская команда работает нормально, когда я вызываю ее через php bin/console app:db:populate
protected function execute(InputInterface $input, OutputInterface $output)
{
// Creating a bunch of default entities, persist them and flush
$data = new MyDefaultEntity();
// ...
$this->manager->persist($data);
// ...
$this->manager->flush();
}
Затем в моем скрипте фикстуры я сначала хочу вызвать app:db:populate
, потому что фикстуры зависят от этих данных. Поэтому я попытался использовать класс Process
для выполнения своего сценария следующим образом:
public function load(ObjectManager $manager)
{
// Execute the custom command
$cmd = 'php bin/console app:db:populate';
$process = new Process($cmd);
$process->run(function ($type, $buffer) {
if (Process::ERR === $type) {
echo 'ERR > '.$buffer;
} else {
echo 'OUT > '.$buffer;
}
});
// Then load the fixtures !
// ...
}
Кажется, что пользовательская команда выполняется хорошо до тех пор, пока $this->manager->flush();
У меня не появится следующая ошибка в моя консоль (данные обфусцированы для сообщения):
In AbstractMySQLDriver.php line 36:
An exception occurred while executing 'INSERT INTO ....(..., ..., ...) VALUES (?, ?, ?)' with params ["...", "...", "..."]:
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
Я не знаю, что делать с этой ошибкой ... Почему команда работает нормально при использовании через консольный вызов classi c и почему он не работает в процессе?
Если у вас есть какая-либо другая стратегия, которая поможет мне достичь моей цели, я слушаю:)
Хорошего дня!