我有一個Administrator
和Role
之間的基本OneToMany關係。Symfony2和Doctrine Mysql測試數據庫持久性
的擁有方是管理員:
/**
* @ORM\OneToMany(targetEntity="App\PublicBundle\Entity\Role", mappedBy="administrator", cascade="persist")
**/
private $roles;
public function __construct() {
$this->roles = new ArrayCollection();
}
逆側角色。
/**
* @ORM\ManyToOne(targetEntity="App\PublicBundle\Entity\Administrator", inversedBy="roles")
* @ORM\JoinColumn(name="admin_id", referencedColumnName="admin_id")
**/
private $administrator;
的Administrator
可以有很多Roles
像ROLE_ADMIN
或ROLE_USER
。
的代碼來保存它們原子是......
$administrator = new Administrator();
$administrator->setName('Mario');
$administrator->setLastname('Superman');
$administrator->setUsername('[email protected]');
$administrator->setPassword('password');
$role_admin = new Role();
$role_admin->setRole('ROLE_ADMIN');
$role_admin->setAdministrator($administrator);
$role_user = new Role();
$role_user->setRole('ROLE_USER');
$role_user->setAdministrator($administrator);
$administrator->setRoles($role_admin);
$administrator->setRoles($role_user);
$em->persist($administrator);
$em->persist($role_user);
$em->persist($role_admin);
$em->flush();
基本的東西。此代碼位於通過Ajax調用的Symfony2控制器中。它拋出一個Integrity constraint violation
,他說他不能在admin_id
列中放置null,因爲它是空的。它還發布了兩條說明undefined index role_id
的通知。
奇怪的是,行沒有保存,但administrators
表上的admin_id
增加。
更奇怪的是我有一個UnitTest可以做同樣的事情(字面意義上是相同的代碼),並堅持實體。
那麼代碼測試代碼如何工作,但實時控制器中的相同代碼卻不行?
編輯:我通過Ajax調用控制器,它不會持續,但如果我直接去使用ajax請求的URL,它會持續兩次。阿賈克斯post請求的第二個,當我直接鏈接到瀏覽器。我在這裏錯過了一些基本的東西,因爲我有一種自我感覺。