ORMInvalidArgumentException: новый объект был найден через отношение Для нескольких итераций - PullRequest
0 голосов
/ 24 февраля 2019

Я получаю учение об ошибке, как описано ниже.Я проверил решения, приведенные в других вопросах, но это не то, что я ищу.

Так что в основном у меня есть действие для создания экзаменационных карточек, как (просто добавив соответствующий код) -

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.

Не могли бы вы помочь мне выяснить, почему он работает для одной итерации, но не для нескольких итераций

...