在学说 2 中是不是可以有一个不是主键的自动增量列?

Posted

技术标签:

【中文标题】在学说 2 中是不是可以有一个不是主键的自动增量列?【英文标题】:In doctrine2 is it possible to have an autoincrement column that is not the primary key?在学说 2 中是否可以有一个不是主键的自动增量列? 【发布时间】:2013-02-04 13:28:25 【问题描述】:

在学说 2 中,我有一个实体,它有一个从 web 服务提供的主键,并且还有一个应该是自动增量的索引。

我可以在 mysql 中手动设置,但在学说 2 中无法使用。

【问题讨论】:

由于 Doctrine 似乎将自动增量限制为 id 字段,您找到解决方法了吗? 【参考方案1】:

我使用了columnDefinitionINT AUTO_INCREMENT UNIQUE

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

Doctrine 迁移包生成

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

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

【讨论】:

在学说/orm v2.6.2 上仍然有效 如果我使用columnDefinition 并在表中插入一条新记录,实体是否会使用自动生成的自增值更新? 另外,columnDefinition 会导致doctrine:migrations:diff 在 UP 和 DOWN 迁移中生成相同的 SQL 语句,例如ALTER TABLE users_interests CHANGE id id BIGINT AUTO_INCREMENT NOT NULL - 此查询在 UP 和 DOWN 迁移中是相同的。【参考方案2】:

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

对于 MyISAM 和 BDB 表,您可以在 多列索引中的第二列。在这种情况下, AUTO_INCREMENT 列的生成值计算为

您可以在 auto_increment here 上获得一般文档

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

所以这适用于mysql。

然而,教义中的 auto_incriment 似乎只允许@Id(主键)

21.2.9。 @GeneratedValue

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

如果这个注解没有用@Id 指定,则使用NONE 策略 默认。

必需的属性:

strategy:设置标识符生成策略的名称。有效的 值是 AUTO、SEQUENCE、TABLE、IDENTITY、UUID、CUSTOM 和 NONE。 示例:

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

Doctrine_auto_increment

你可能想找一个工作区并张贴一张关于它的票

【讨论】:

@MatthieuNapoli 当时是的,但 6 年后我不确定,但似乎 Auto 仍然基于 Mysql 上可用的内容。也许您需要的是 UUID 策略? .检查此链接:***.com/a/14029064/1427338

以上是关于在学说 2 中是不是可以有一个不是主键的自动增量列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql中获取所有具有自动增量主键的表?

Azure 表存储上的自动增量

如何将自动增量设置为非主键?

如果自动增量字段不是第一个,jOOQ 可以支持复合主键吗

如何在php中添加自动增量主键

错误 #1062 主键的 Mysql 重复条目