基于Doctrine与Symfony:生成Fixture及迁移重命名数据
没问题,我来帮你搞定这两个步骤——先完善Fixture生成指定测试记录,再编写Migration完成批量重命名操作。
1. 完善Fixture代码生成10条测试记录
你原来的代码已经有了基础框架,我帮你补全并做了优化,避免因找不到parent记录导致的异常:
<?php namespace App\DataFixtures; use App\Entity\Category; use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Persistence\ObjectManager; class AppFixtures extends Fixture { public function load(ObjectManager $manager): void { // 循环生成10条Category记录,name为test0到test9 for ($i = 0; $i < 10; $i++) { $category = new Category(); $category->setName('test ' . $i); // 处理parent关联:如果找到对应ID的分类才设置,避免报错 $parentId = mt_rand(89, 140); $parent = $manager->getRepository(Category::class)->find($parentId); if ($parent instanceof Category) { $category->setParent($parent); } $manager->persist($category); } $manager->flush(); } }
代码说明:
- 循环
$i从0到9,生成test 0到test 9(如果不需要空格可以改成test{$i})的名称 - 增加了
instanceof判断,避免当随机ID找不到对应Category时抛出异常 - 最后调用
flush()提交所有记录到数据库
2. 创建Migration批量重命名记录
接下来我们编写一个Doctrine迁移类,把所有名称以test 开头的Category记录,重命名为category 0到category 9:
首先通过命令生成迁移类:
php bin/console make:migration
然后打开生成的迁移文件(位于src/Migrations/VersionXXXXXXXXX.php),替换up和down方法为以下内容:
<?php namespace DoctrineMigrations; use Doctrine\DBAL\Schema\Schema; use Doctrine\Migrations\AbstractMigration; final class VersionXXXXXXXXX extends AbstractMigration { public function getDescription(): string { return 'Rename testX category records to categoryX'; } public function up(Schema $schema): void { // 使用SQL批量更新:匹配name以'test '开头的记录,替换前缀 $this->addSql(" UPDATE category SET name = CONCAT('category ', SUBSTRING(name, 6)) WHERE name LIKE 'test %' "); } public function down(Schema $schema): void { // 回滚操作:把category前缀改回test $this->addSql(" UPDATE category SET name = CONCAT('test ', SUBSTRING(name, 10)) WHERE name LIKE 'category %' "); } }
代码说明:
up方法:通过SQL的SUBSTRING截取test后面的数字部分,拼接成category开头的新名称down方法:作为回滚操作,把category前缀改回test,确保迁移可以反向执行- 注意
SUBSTRING的起始位置:test是5个字符(t-e-s-t-空格),所以从第6位开始截取;category是9个字符,所以从第10位开始截取
最后执行迁移生效:
php bin/console doctrine:migrations:migrate
内容的提问来源于stack exchange,提问作者Dialkord
相关产品推荐
相关产品推荐

