在doctrine2中,是否可以使用不是主键的自动增量列?

时间:2013-02-19 18:26:05

标签: zend-framework symfony doctrine-orm primary-key auto-increment

在doctrine2中,我有一个实体,它有一个主键,它来自web服务,并且还有一个应该是自动增量的索引。

我可以在mysql中手动设置但不能在doctrine2中使用它。

3 个答案:

答案 0 :(得分:15)

我使用了columnDefinition

INT AUTO_INCREMENT UNIQUE
/**
 * @var integer
 *
 * @ORM\Column(type="integer", name="sequence", nullable=true, columnDefinition="INT AUTO_INCREMENT UNIQUE")
 */
protected $sequence = null;

Doctrine migration bundle生成

$this->addSql('ALTER TABLE table_name_here ADD sequence INT AUTO_INCREMENT UNIQUE');

编辑:请注意,此答案来自2016年,可能不再有效。见接受的答案。

答案 1 :(得分:7)

自动增量限制与您使用的数据库有关。 在Mysql中,Mysql_autoincrement,它还取决于您使用的引擎。 为例:

  

对于MyISAM和BDB表,您可以在a上指定AUTO_INCREMENT   多列索引中的辅助列。在这种情况下,   AUTO_INCREMENT列的生成值计算为

您可以获得有关auto_increment here

的一般文档

通常,auto_increment保留给作为标识符索引一部分的数字字段(涉及一个或多个列)。

所以这可以用于mysql。

然而,教条中的auto_incriment似乎只是为了@Id(主键)

  

21.2.9。 @GeneratedValue

     

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

     

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

     

必需属性:

     

策略:设置标识符生成策略的名称。有效   值包括AUTO,SEQUENCE,TABLE,IDENTITY,UUID,CUSTOM和NONE。   例如:

?php
/**
 * @Id
 * @Column(type="integer")
 * @GeneratedValue(strategy="AUTO")
 */
protected $id = null;

Doctrine_auto_increment

你可能想要找一份工作并发一张关于它的票据

答案 2 :(得分:-5)

/**
* @Id
* @Column(name="id", type="integer")
* @GeneratedValue(strategy="AUTO")
*/
protected $id;

这适用于mysql!希望它有所帮助!