Doctrine 2添加自动生成序列值的新字段

时间:2014-03-11 19:51:54

标签: php mysql sql symfony doctrine-orm

我有一个表(A类)继承自另一个表(B类),所以很明显表A的主键引用了表B的主键。但是,我尝试做的是向表A添加一个新字段,该字段应该自动递增并且还会启动一个特定的值,例如。 1000001.

我尝试过在A类中添加这个新字段(列)的多种方法,但我无法使其工作:

Class A extends B {
/**
 * @var integer
 *
 * @ORM\GeneratedValue(strategy="Identity")
 * @ORM\Column(type="integer")
 * @ORM\SequenceGenerator(sequenceName="beer_id", allocationSize=1, initialValue=1000001)
 **/
private $beerIdNumber;

如何让这个新列自动生成序列值,并可能使其成为一个额外的主键列或是唯一值? (我的数据库是MySql)

1 个答案:

答案 0 :(得分:1)

来自Doctrine 2 Documentation

  

序列生成器目前可以与。一起使用   Oracle或Postgres并允许一些其他配置选项   除了指定序列的名称

对你来说,你需要使用的只是使用:

Class A extends B {

/**
 * @var integer
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="Identity")
 * @ORM\Column(type="integer")
 */
 private $beerIdNumber;

同样来自documentation

  

@GeneratedValue指定用于标识符的策略   生成由@Id注释的实例变量。这个   注释是可选的,只有在结合使用时才有意义   与@Id。

     

如果未使用@Id指定此注释,则使用NONE策略   默认情况下。

<强>无论其

Composite Keys

  

Doctrine 2允许使用复合主键。但是有   与使用单个标识符相反的一些限制。使用了   @GeneratedValue注释仅支持简单(不是   复合)主键,这意味着您只能使用复合键   如果您在调用之前自己生成主键值   EntityManager#persist()在实体上。

     

要指定复合主键/标识符,只需输入@Id即可   构成主键的所有字段上的标记注释。