Стратегия генерации идентификатора для этой сущности требует, чтобы поле ID было заполнено до вызова EntityManager # persist ()

Я связываю, чтобы создать отношения один ко многим

Иметь класс

class Interview {

    /**
     * @OneToMany(targetEntity = "Question", mappedBy = "question")
     */
    private $questions;

    public function __construct() {
        $this->questions = new ArrayCollection();
    }

    public function __toString() {
        return $this->id;
    }

    /**
     * @return Collection|Question[]
     */
    public function getQuestions() {
        return $this->questions;
    }

    /**
     * @ORM\Column(name = "id", type = "integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy = "AUTO")
     */
    private $id;
    ......
}

Другой

class Question {

    /**
     * @ManyToOne(targetEntity = "Interview", inversedBy = "interview")
     * @JoinColumn(name = "interview_id", referencedColumnName = "id")
     */
    private $interview;

    public function getInterview() {
        return $this->interview;
    }

    public function setInterview(Interview $interview) {
        $this->interview = $interview;
        return $this;
    }

    /**
     * @ORM\Column(type = "integer")
     * @ORM\Id
     */
    private $interview_id;
    ......
}

и Контроллер для всего этого

if ($form->isSubmitted() && $form->isValid()) {

        $interview = new Interview();
        $question = new Question();

        $em->persist($interview);

        $question->setInterview($interview);
        $question->setTitle($request->get('title'));
        $em->persist($question);
        $em->flush();

        return $this->redirectToRoute('homepage');
}

я получаю сообщение об ошибке:

Entity of type AppBundle\Entity\Question is missing an assigned ID for field 'interview_id'. The identifier generation strategy for this entity requires the ID field to be populated before EntityManager#persist() is called. If you want automatically generated identifiers instead you need to adjust the metadata mapping accordingly.

Не понимаю, в чем проблема и как ее исправить.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
2
0
3 195
3

Ответы 3

Для принудительной повторной загрузки объектов из базы данных вместо их обслуживания из карты идентичности. Вы можете вызвать в $em->clear(); после того, как сделали $em->persist($interview);, т.е.

$interview = new Interview();
$em->persist($interview);
$em->clear();

Спасибо, но это не помогло. Я не хочу загружать объект из базы данных. iwant вставлять записи в разные таблицы, которые имеют ссылку от одного ко многим

deymaz 01.04.2018 16:55

Мне очень интересно, поможет ли вам предложение Zalex. Возможно, это действительно зависит от конфигурации доктрины в проекте. Пожалуйста, опубликуйте конфигурацию doctrine здесь для получения дополнительной помощи

vikbert 02.04.2018 20:41

Похоже, что в конфигурации вашего проекта есть ошибка в отображаемой части доктрины.

If you want automatically generated identifiers instead you need to adjust the metadata mapping accordingly.

Попробуйте посмотреть полный конфигурация доктрины и поработайте с

auto_mapping: false to true as example or something else...

Иди это, может пригодится.

Я уверен, что уже поздно отвечать, но, возможно, кто-то еще получит эту ошибку :-D Вы получаете эту ошибку, когда ваша связанная сущность (здесь, сущность Interview) имеет значение null.

Конечно, вы уже создали новый экземпляр Interview, но, поскольку эта сущность содержит только одно поле (id), до того, как эта сущность будет сохранена, ее идентификатор будет равен NULL. Поскольку другого поля нет, доктрина считает, что этот объект имеет значение NULL. Вы можете решить эту проблему, вызвав flush () перед связыванием этой сущности с другой сущностью.

Другие вопросы по теме