在新实体上触发自动生成字段(Symfony中的Doctrine)/避免完整性约束违规字段不能为空

时间:2017-01-05 12:08:16

标签: doctrine-orm doctrine symfony auto-generate

使用Symfony 3.x和Doctrine我有这个问题: 实体" Foo"定义如下:

/**
 * @ORM\Entity
 * @ORM\Table(name="foo")
 */
class Foo
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $incr_int;

    ...
}

暂且不考虑$ id和$ incr_int(总是?)是相同的值我在创建Foo类型的新实体时会出现以下错误:

An exception occurred while executing 'INSERT INTO foo (incr_int) VALUES (?)' with params [null]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'incr_int' cannot be null

虽然这看起来似乎有意义看错误本身我不知道如何在创建这样的Foo时修复它(我相信它是Symfony中的标准方法?):

$foo = new Foo();
$em->persist($foo);     // $em is the entity manager
$em->flush();

就像我期望它从Foo中删除$ incr_int字段一样,因为剩下的字段$ id是通过将最后插入的id-value增加1来自动生成的。我假设这个行为应该是相同的$ incr_int字段。嗯......显然它没有,我无法弄清楚原因。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:0)

我的代码中有2个问题(感谢@nospor)。

  1. 一个表只能有一个自动增量字段(第二个字段无论如何都没有多大意义)。
  2. 创建新实体时,在真正更新数据库(刷新实体管理器)时会生成id。
  3. 我可以通过删除第二个自动增量条件并使用必填字段创建实体来解决此问题(此处仅显示自动生成的id字段),然后将其刷新。刷新后,我能够检索id并生成第二个字段的值,其中包含一个取决于id值的计算值。