Doctrine2エンティティの関連付けで問題が発生しています。ユーザーエンティティとエージェンシーエンティティがあります。1つのエージェンシーが複数のユーザーを雇用することができます(エンティティは私の問題のみを表示するように簡略化されています)
ユーザーエンティティ
/**
* @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はユーザーのagency_idを設定しないため、ユーザーのagency_idがnullであってはならないというmysqlの制約エラーが発生します。
// $em is the Doctrine EntityManager
$agency = new Agency;
$user = new User;
$agency->addUser($user);
$em->persist($agency);
$em->flush();
これまでのところ、Doctrineにユーザーのagency_idを設定させる唯一の方法は、ユーザーをエージェンシーに追加することに加えて、エージェンシーをユーザーに割り当てることです。私のORMの理解では、ユーザーがエージェンシーのユーザーコレクションに含まれていて、保存されているときに、すでにエージェンシーIDを設定しているはずです。
$user->agency = $agency;
$agency->addUser($user);
アノテーション/メタデータに何か問題や欠落がありますか?