Доктрина отношений один-ко-многим не спасет - нарушение ограничений целостности

Я пытаюсь использовать Doctrine ORM Ассоциации. Я прочитал несколько учебных пособий и онлайн-документов, но это не работает, и я, честно говоря, не уверен, что я делаю здесь не так. Похоже, мои эксперименты с Доктриной довольно удачны. Любая помощь будет оценена.

Я хотел бы иметь сущность User и сущность UserHistory, которая имеет несколько строк для одного пользователя. Для меня это звучит как One-To-Many. Мне не обязательно, чтобы это было двунаправленным.

Проблема, которую я имею при добавлении элемента истории к пользователю, приводит к ошибке при сохранении пользователя, потому что столбец user_id не установлен в таблице user_history.

Объекты:

# Entity\User.php
<?php
namespace Application\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity
 */
class User
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\Column(type="string",length=255)
     */
    protected $username;

    /**
     * @ORM\OneToMany(targetEntity="UserHistory", mappedBy="user", cascade={"persist","remove"})
     * @ORM\JoinColumn(name="id", referencedColumnName="user_id")
     */
    protected $history;

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

    public function getHistory()
    {
        return $this->history;
    }
}

# Entity\UserHistory.php
<?php
namespace Application\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="user_history")
 */
class UserHistory
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
     */
    protected $user;

    public function getUser()
    {
        return $this->user;
    }
}

В моем контроллере я пытаюсь это:

    $em = $this->getUserService()->getEntityManager();
    $user = $em->find('Picpara\Entity\User', 1);
    $history = new UserHistory();
    $user->getHistory()->add($history);
    $em->persist($user);
    $em->flush();

Все это приводит к нарушению ограничений целостности.

Учение \ DBAL \ DBALException

Файл: /myproject/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:91

Сообщение:

Возникла исключительная ситуация при выполнении 'INSERT INTO user_history (user_id) VALUES (?)' С параметрами [null]:

SQLSTATE [23000]: нарушение ограничения целостности: 1048 Столбец user_id не может быть пустым

Как я уже сказал, я копался на SO, гуглил, пытался что-то передвигать в аннотациях. Это насколько я понимаю. Не уверен, что я делаю не так. Кто-нибудь может помочь?

Ответы на вопрос(1)

Ваш ответ на вопрос