Symfony2和Doctrine Mysql测试数据库持续存在

时间:2015-01-26 20:37:22

标签: mysql symfony doctrine-orm

我在AdministratorRole之间存在基本的OneToMany关系。

拥有方是管理员:

/**
 * @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_ADMINROLE_USER

以原子方式保存它们的代码是......

    $administrator = new Administrator();
    $administrator->setName('Mario');
    $administrator->setLastname('Superman');
    $administrator->setUsername('mario@gmail.com');
    $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,因为它是null。它还会发出两个说undefined index role_id的通知。

奇怪的是,没有保存行,但admin_id表上的administrators会增加。

更奇怪的是,我有一个UnitTest做同样的事情(字面意思是相同的代码),并坚持实体。

那么代码测试代码如何工作但实时控制器中的相同代码却没有?

编辑:我通过Ajax调用控制器并且它不会被持久化但是如果我直接使用ajax发出请求的url,它会持续两次。当我直接在浏览器上链接时,ajax发布请求和第二次请求。我错过了一些基本的东西,因为我有一种感觉,我是。

1 个答案:

答案 0 :(得分:1)

答案是我的数据库被命名为test_suite mysql认为是测试数据库。我不知道细节,但似乎每个具有test_名称的数据库都由mysql在特殊规则中进行了注册。正如我所说,我不知道细节,但我无法在那种数据库中创建事务性插入语句。

当我创建一个名为suit的新数据库时,一切正常。

This blog post 并没有说测试数据库中禁止使用事务性插入语句,但似乎将数据库命名为test_似乎是个坏主意。我不知道这一点,并且必须以艰难的方式学习它