La relación uno a muchos de Doctrine no se salvará – Violación de restricción de integridad

Estoy intentando usar Doctrine ORM Associations. He leído varios tutoriales y documentos en línea, pero no está funcionando, y honestamente no estoy seguro de lo que estoy haciendo mal aquí. Parece que mis experimentos con Doctrine son bastante impredecible. Cualquier ayuda sería apreciada.

Me gustaría tener una entidad de usuario y una entidad de historia de usuario, que tiene múltiples filas para un solo usuario. Eso para mí suena como Uno-A-Muchos. No necesariamente necesito que sea bidireccional.

El problema que estoy teniendo es agregar un elemento de historial a un usuario provoca un error cuando el usuario se guarda, porque la columna user_id no está configurada en la tabla user_history.

Entidades:

# Entity\User.php setHistory(new ArrayCollection()); } public function getHistory() { return $this->history; } } # Entity\UserHistory.php user; } } 

En mi controlador, estoy intentando esto:

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

Todo lo cual resulta en una violación de restricción de integridad.

Doctrine \ DBAL \ DBALException

Archivo: /myproject/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:91

Mensaje:

Se produjo una excepción al ejecutar ‘INSERT INTO user_history (user_id) VALUES (?)’ Con params [null]:

SQLSTATE [23000]: violación de restricción de integridad: 1048 La columna ‘user_id’ no puede ser nula

Como dije, he buscado aquí en SO, busqué en Google, intenté mover las cosas en las anotaciones. Esto es lo más lejos que puedo llegar. No estoy seguro de lo que estoy haciendo mal. ¿Alguien puede ayudar?

El problema es que no está configurando la entidad de usuario en su clase de historial. Las cosas de asociación no hacen esto automáticamente.

 class UserHistory { public function setUser($user) { $this->user = $user; } class User { public function addHistory($history) { $this->history->add($history); $history->addUser($this); // *** This is what you are missing } // In your controller class $user->addHistory($history);