Сущность объединения Doctrine 2 не устанавливает значение для внешнего ключа

Я встречаю проблему с ассоциацией сущностей Doctrine 2. У меня есть объект пользователя и объект агентства. Одно агентство может использовать несколько пользователей (объекты упрощены, чтобы показать только мою проблему)

Пользовательский объект

/** * @Entity * @Table(name="users") **/ class User { /** * @Id * @Column(type="integer") * @GeneratedValue * @var integer **/ protected $id; /** * @ManyToOne(targetEntity="Agency", inversedBy="users"}) * @JoinColumn(name="agency_id", referencedColumnName="id") * @var Agency */ protected $agency; } 

Агентство

 /** * @Entity * @Table(name="agencies") **/ class Agency { /** * @Id * @Column(type="integer") * @GeneratedValue * @var integer **/ protected $id; /** * @OneToMany(targetEntity="User", mappedBy="agency", cascade={"all"}) * @JoinColumn(name="id", referencedColumnName="agency_id") * @var User[] */ protected $users; /** * Add a user to the agency * * @param User $user * @return void */ public function addUser(User $user) { $this->users[] = $user; } } 

Когда я теперь использую следующий код для создания агентства вместе с пользователем, Doctrine не устанавливает агент_и_ид для пользователя, который приводит к ошибке ограничения mysql, которая должна быть недействительной.

 // $em is the Doctrine EntityManager $agency = new Agency; $user = new User; $agency->addUser($user); $em->persist($agency); $em->flush(); 

до сих пор единственным способом, который я нашел, чтобы Doctrine установить агент_ид для пользователя, назначает агентство пользователю дополнительно к добавлению пользователя в агентство. В моем понимании ORM он уже должен установить агент_ид, когда пользователь находится в пользовательской коллекции агентства, и он спасен.

 $user->agency = $agency; $agency->addUser($user); 

Есть что-то неправильно или отсутствует в моих аннотациях / метаданных?

Я нашел что-то в документации Doctrine 2:

Изменения, внесенные только в обратную сторону ассоциации, игнорируются. Не забудьте обновить обе стороны двунаправленной ассоциации (или, по крайней мере, стороны-владельца, с точки зрения Доктрины)

Как и в моем случае, владельцем является Пользователь, я должен его обновить. Доктрина 1 смогла справиться с ней автоматически … слишком плохо.