我有一个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请求的第二个,当我直接链接到浏览器。我在这里错过了一些基本的东西,因为我有一种自我感觉。