Doctrine 2. ORM:schema-tool:update. 设置起始ID

10
当我使用./bin/doctrine orm:fixtures:load命令来插入示例数据时,第一次迁移会自动将表ID设置为1、2、3、4、5等递增的数字。
在第二次orm:fixtures:load命令之后,它会清除所有数据并将ID设置为5、6、7、8、9等等递增的数字。
我如何在多次加载固定数据时重置AI ID计数器为1?
2个回答

21

$ app/console help doctrine:fixtures:load

Doctrine数据固定装置默认使用DELETE语句从数据库中删除现有行。如果您想要改用TRUNCATE语句,可以使用--purge-with-truncate标志:

./app/console doctrine:fixtures:load --purge-with-truncate

截断会重置自增。

更新

这个控制台命令是针对Symfony的,但仅使用Doctrine应该是相同的:

./bin/doctrine orm:fixtures:load --purge-with-truncate

关于抛出异常的评论的更新 #2

如果您有外键,您只能通过常规SQL重置AUTO_INCREMENT

$connection = $this->getEntityManager()->getConnection();
$connection->exec("ALTER TABLE <tablename> AUTO_INCREMENT = 1;");

7
抛出异常:语法错误或访问冲突:1701 无法截断被外键约束引用的表。 - mindsupport

2
在Zend 2中,我使用了下面的代码来截断并将自动递增值重置为1。在您的存储库中使用此代码。
// To delete all records
$queryBuilder = $this->createQueryBuilder('c');
$queryBuilder->delete();
$queryBuilder->getQuery()->execute();

//Reset table auto increment.
$tableName = $this->getClassMetadata()->getTableName();
$connection = $this->getEntityManager()->getConnection();
$connection->exec("ALTER TABLE " . $tableName . " AUTO_INCREMENT = 1;");

我稍微扩展了一下你的代码,让它适用于simony3: $em = $this->container->get("doctrine")->getManager(); $tableName = $em->getClassMetadata('AcmeWebBundle:NameEntity')->getTableName(); $connection = $em->getConnection(); $connection->exec("ALTER TABLE " . $tableName . " AUTO_INCREMENT = 1;"); - Vladimir Ch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接