Как установить начальное значение auto_increment с помощью doctrine2 - PullRequest
6 голосов
/ 05 ноября 2011

Я использую преобразователь doctrine2 для создания базы данных innoDB (mysql).Как установить начальное значение моего идентификатора auto_incremented с помощью аннотаций php?

Вот как я смоделировал идентификатор своего типа сущности на данный момент.

/**
 * @var integer $_id
 *
 * @Column(name="id", type="integer", nullable=false)
 * @Id
 * @GeneratedValue(strategy="IDENTITY")
 */
private $_id;

Я нашел следующий код в документации, но похоже, что он будет использовать отдельную таблицу для генерации идентификаторов.

/**
 * @Id
 * @GeneratedValue(strategy="SEQUENCE")
 * @Column(type="integer")
 * @SequenceGenerator(sequenceName="tablename_seq", initialValue=1, allocationSize=100)
 */

Ответы [ 3 ]

2 голосов
/ 13 ноября 2011

Вы можете установить стратегию = "НЕТ" и установить последний идентификатор в функции @prepersist. Проще было бы просто добавить «ALTER TABLE что-то AUTO_INCREMENT = 100;» в DataFixture или DB миграции. Это не переносимый SQL, но он делает работу без добавления сложности в вашу сущность.

1 голос
/ 09 августа 2017

не совсем ясно из документации, но источники говорят ...

doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php:        if (isset($options['auto_increment'])) {
doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php:            $tableOptions[] = sprintf('AUTO_INCREMENT = %s', $options['auto_increment']);

, поэтому для mysql работает как опция для @table annotation

* @ORM\Table(name="xxx", options={"auto_increment": 100})
0 голосов
/ 03 мая 2019

Вот полный пример кода для установки auto_increment в доктрине 2 в MySQL:

$connection = $this->getEntityManager()->getConnection();
$connection->prepare('ALTER TABLE my_table AUTO_INCREMENT = 100;')->execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...