Я получаю учение об ошибке, как описано ниже.Я проверил решения, приведенные в других вопросах, но это не то, что я ищу.
Так что в основном у меня есть действие для создания экзаменационных карточек, как (просто добавив соответствующий код) -
function generateExamCardAction{
$examSetting = $this->getExamSetting();
$this->insertExamCard($classId, $examSetting);
$insertedExamCard = $this->fetchExamCard($classId);
$this->generatePdf($insertedExamCard);
}
И функция insertExamCard выглядит следующим образом:
function insertExamCard($classId, $examSetting){
$em = $this->getEntityManager();
$examCard = new ExamCard();
$examCard->setClassId($classId);
$examCard->setExamSetting($examSetting);
$em->persist($examCard);
$em->flush();
$em->clear();
}
А доктрина связи между ExamCard и ExamSetting выглядит так:
/**
* @ORM\ManyToOne(targetEntity="ExamSetting")
* @ORM\JoinColumn(name="ExamSettingId", referencedColumnName="id")
*/
protected $examSetting;
Обратите внимание, что я не каскадировал его, используя cascade={"persist"}
, потому чтоЯ не хочу манипулировать таблицей ExamSetting любой ценой, так как это главная таблица.
Пока все работает нормально.ExamCard вставляется правильно, затем извлекается правильно и затем генерирует pdf должным образом.
Но теперь я должен повторить логику в generateExamCardAction () для нескольких классов.Так было бы так:
function generateExamCardAction{
$examSetting = $this->getExamSetting();
foreach($classes as $classId){
$this->insertExamCard($classId, $examSetting);
$insertedExamCard = $this->fetchExamCard($classId);
$this->generatePdf($insertedExamCard);
}
}
В этом случае первая итерация работает нормально.То есть для 1-го класса он вставляет ExamCard, затем правильно выбирает и генерирует pdf.
Но для второй итерации выдается следующее сообщение об ошибке:
Doctrine \ ORM \ ORMInvalidArgumentException: новая сущность быланайдено через отношение «Application \ Entity \ ExamCard # examSetting», которое не было настроено для каскадного сохранения операций для сущности
Я полагаю, что проблема связана с $em->clear()
.
Я пыталсяизменив его на $em->clear($examCard)
.В этом случае это не выдает ошибку, но данные, извлеченные fetchExamCard (), не имеют полей ExamSetting, установленных в ExamCard.
Не могли бы вы помочь мне выяснить, почему он работает для одной итерации, но не для нескольких итераций