【问题标题】:Doctrine Auto Increment Starting Value @ORM\GeneratedValueDoctrine 自动增量起始值 @ORM\GeneratedValue
【发布时间】:2015-10-30 07:46:07
【问题描述】:

如何使用注释设置自动递增 id 的起始值?

我希望它从 250000 开始

/**
 * @ORM\Id
 * @ORM\GeneratedValue
 * @ORM\Column(type="integer")
 */
protected $id;

【问题讨论】:

    标签: php sql symfony orm doctrine-orm


    【解决方案1】:
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @ORM\SequenceGenerator(sequenceName="id", initialValue=250000)
     * @ORM\Column(type="integer")
     */
     protected $id;
    

    http://doctrine-orm.readthedocs.org/en/latest/reference/basic-mapping.html

    【讨论】:

    • 如果我错了请纠正我,但这不会在 MySql 上对吗?由于 MySql 没有序列,它有 AUTO_INCREMENT
    • Doctrine 将所有这些抽象出来,并根据所选的 DBMS 使其工作。如果底层 DBMS 不支持序列或自动递增,则学说将在内部处理递增
    • Currently - 2.5.4,只有 Oracle、PostgreSql 和 SQL Anywhere 支持序列。
    【解决方案2】:

    在 MySQL 平台上,我编写 (@ORM\Table(options={"auto_increment": 12345})) 将“AUTO_INCREMENT = 12345”添加到 SQL 创建表中。我没用@ORM\SequenceGenerator

    /*
     * @ORM\Table(options={"auto_increment": 12345})
     */
    class MyEntity {
    
        /**
         * @ORM\Id()
         * @ORM\GeneratedValue()
         * @ORM\Column(type="integer")
         */
        private $id;
    
        // Others properties
    }
    

    在迁移文件中:

        $this->addSql('CREATE TABLE my_entity (id INT AUTO_INCREMENT NOT NULL, ...) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB AUTO_INCREMENT = 12345');
    

    【讨论】:

    • 谢谢,如果您使用 MySQL,这可能是最好的解决方案。它实际上使用数据库来处理增量,与 SequenceGenerator 解决方案不同,您不必对生成的迁移文件进行任何编辑,Doctrine 从实体注释中设置正确的 AUTO_INCREMENT 值。
    【解决方案3】:

    不知道这个答案对用户有用与否。 但对我来说,它给出了所需的结果(对于 mysql 的教义) 我使用了通常使用的自动增量 ID,

    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    

    第一次运行命令更新时,表将创建。 比你应该手动运行下面的命令来设置自定义初始自动增量 id

    ALTER TABLE users AUTO_INCREMENT=1001;
    

    再次在运行模式时,它不会更新手动设置的自动增量。 就是这样!!这是理想的结果。

    【讨论】:

      猜你喜欢
      • 2017-11-16
      • 2012-05-16
      • 2014-04-30
      • 2013-08-24
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2016-07-21
      相关资源
      最近更新 更多