在主键上使用PostgreSQL序列的Doctrine更新架构

fut*_*eal 1 postgresql doctrine symfony

我试图将Doctrine模型包装在PostgreSQL中的遗留数据库表中,该表具有:

    Column   |           Type           |                      Modifiers                       
 ------------+--------------------------+------------------------------------------------------
  id         | integer                  | not null default nextval('table_name_id_seq'::regclass)
Run Code Online (Sandbox Code Playgroud)

如果我尝试映射,如:

/**
 * @ORM\Id
 * @ORM\Column(name="id", type="integer", unique=true)
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;
Run Code Online (Sandbox Code Playgroud)

然后架构更新工具给我这个:

 ALTER TABLE table_name ALTER id DROP DEFAULT;
Run Code Online (Sandbox Code Playgroud)

如果我尝试显式定义默认值,例如:

/**
 * @ORM\Id
 * @ORM\Column(name="id", type="integer", unique=true, options={"default"="nextval('table_name_id_seq'::regclass)"})
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;
Run Code Online (Sandbox Code Playgroud)

然后它仍然给出:

ALTER TABLE table_name ALTER id SET DEFAULT nextval('table_name_id_seq'::regclass);
ALTER TABLE table_name ALTER id DROP DEFAULT;
Run Code Online (Sandbox Code Playgroud)

最后,如果我尝试手动指定序列:

/**
 * @ORM\Id
 * @ORM\Column(name="id", type="integer", unique=true)
 * @ORM\GeneratedValue(strategy="SEQUENCE")
 * @ORM\SequenceGenerator(sequenceName="table_name_id_seq", initialValue=1, allocationSize=1)
 */
private $id;
Run Code Online (Sandbox Code Playgroud)

我仍然得到DROP DEFAULT:

ALTER TABLE table_name ALTER id DROP DEFAULT;
Run Code Online (Sandbox Code Playgroud)

是否有针对此问题的解决方法仍允许使用架构更新工具?我无法找到与此相关的Doctrine错误,但我可能错过了一些东西.这是在Symfony 2.5.2下运行的最新2.4.X版本的Doctrine.

小智 7

尝试

* @ORM\GeneratedValue(strategy="IDENTITY")