我有一个表(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)
答案 0 :(得分:1)
序列生成器目前可以与。一起使用 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策略 默认情况下。
<强>无论其强>
Doctrine 2允许使用复合主键。但是有 与使用单个标识符相反的一些限制。使用了 @GeneratedValue注释仅支持简单(不是 复合)主键,这意味着您只能使用复合键 如果您在调用之前自己生成主键值 EntityManager#persist()在实体上。
要指定复合主键/标识符,只需输入@Id即可 构成主键的所有字段上的标记注释。