在创建实体和存储库后为现有数据库生成初始迁移。

4
从现有的pre-doctrine数据库创建实体和仓库后,我无法进行初始迁移。它给了我这个错误 [ERROR] The version "latest" couldn't be reached, there are no registered migrations. 有什么办法可以在不重新开始的情况下进行初始迁移吗?出于某种原因,迁移文件夹存在于src文件夹外面,为什么会这样?在以前的项目中,迁移文件夹在src文件夹内部。
非常感谢您的阅读,期待您的见解。
编辑:doctrine_migrations.yaml:
doctrine_migrations:
    migrations_paths:
        # namespace is arbitrary but should be different from App\Migrations
        # as migrations classes should NOT be autoloaded
        'DoctrineMigrations': '%kernel.project_dir%/migrations'

我用来生成实体和仓库的命令如下:
  1. php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity
  2. 在实体.php中修改@ORM\Entity => @ORM\Entity(repositoryClass="App\Repository\UserRepository")
  3. php bin/console make:entity --regenerate
然后当我运行bin/console doctrine:migrations:migrate时,出现了错误。

你能展示一下你的doctrine_migrations(如果使用maker也请展示)的配置文件以及你正在使用的命令吗? - CasualBen
如果脚本在指定的文件夹中找不到任何迁移文件,则会显示此错误。 请检查您的配置路径,并确保您使用正确的配置与正确的迁移捆绑包版本:https://symfony.com/doc/master/bundles/DoctrineMigrationsBundle/index.html - Jeroen
@DasBen 更新了 doctrine_migration.yaml,我明白为什么迁移文件夹在外面了。 - diggledoot
@Jeroen,我可以使用doctrine:migrations:dump-schema生成初始迁移。但是,对实体的更改未被检测到。 - diggledoot
3个回答

3

为我工作

doctrine_migrations:
    migrations_paths:
        'App\Migrations': '%kernel.project_dir%/src/Migrations'

并用于迁移类

namespace App\Migrations;

0

我尝试了大部分的方法,但似乎可以生成迁移。然而,对实体的更改将无法被Doctrine检测到。

例如,如果我将名称字段更改为用户名,php bin/console doctrine:migration:diff 将无法检测到更改。

我发现有效的方法是将数据库导出为 .sql,以正常方式创建实体,并手动输入字段。在phpmyadmin中删除生成的表格,然后重新导入数据。只有这样才能按照我的意愿工作。


0

这是我的迁移配置。你可以测试它:

doctrine_migrations:
    dir_name: '%kernel.project_dir%/src/Migrations'
    # namespace is arbitrary but should be different from App\Migrations
    # as migrations classes should NOT be autoloaded
    namespace: DoctrineMigrations

对于迁移命令,我使用:php bin/console d:m:diff,然后您可以使用此命令与迁移编号: php bin/console d:m:e --up 迁移编号


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