DoctrineMigrationsBundle

编辑本页

原则:模式:更新命令或使用SQL语句手动应用数据库更改,迁移允许以安全的方式复制数据库模式中的更改。

在Symfony应用程序中可以通过ob娱乐下载DoctrineMigrationsBundle,它使用外部原则数据库迁移图书馆。读了欧宝官网下载app如果您需要关于迁移的一般介绍。

如果你不使用ob娱乐下载Symfony Flex,你必须在应用程序中手动启用bundle:

1 2 3 4 5 6
/ /配置/ bundles.php//在旧的Symfonyob娱乐下载应用中,启用app/AppKernel.php中的bundle返回/ /……学说\包\ MigrationsBundle \ DoctrineMigrationsBundle::Class => [“所有”= >真正的]];

doctrine_migrations.yaml配置文件自动创建。否则,创建以下文件并为您的应用程序配置它:

12 34 56 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
#配置/包/ doctrine_migrations.yamldoctrine_migrations:#用于搜索迁移的名称空间/路径对列表,至少需要一个migrations_paths:“App \迁移”“% kernel.project_dir % / src /应用程序”“AnotherApp \迁移”“/道路/ /其他/迁移”“SomeBundle \迁移”“@SomeBundle /迁移”#要加载的其他迁移类列表,可选迁移:-“App \迁移\ Version123”-“App \迁移\ Version123”#用于迁移的连接连接:默认的#用于迁移的实体管理器。这将覆盖“connection”设置。新兴市场:默认的储存:#默认(SQL表)元数据存储配置table_storage:table_name:“doctrine_migration_versions”version_column_name:“版本”version_column_length:192executed_at_column_name:“executed_at”可能的值:“BY_YEAR”,“BY_YEAR and _month”,falseorganize_migrations:#自定义迁移模板的路径custom_template:#在一个事务中运行所有迁移。all_or_nothing:在生成的迁移中添加一个额外的检查,以确保在相同的数据库类型上执行。check_database_platform:真正的#是否将迁移打包到单个事务中。事务:真正的#是否启用分析器收集器来计算和可视化迁移状态。这增加了一些查询开销。# enable_profiler: false服务:#自定义迁移排序服务id“教义\ \迁移\版本比较器”#自定义迁移类工厂“教义\迁移\ \ MigrationFactory版本”工厂:#通过可调用对象自定义迁移排序服务id (MyCallableFactory必须是一个可调用对象)“教义\ \迁移\版本比较器”“MyCallableFactory”
  • 服务Node允许您向底层提供自定义服务DependencyFactory的一部分教义/迁移
  • 的节点工厂类似于服务,不同之处在于它只接受可调用对象。

对象提供的可调用对象必须返回要传递给对象的服务DependencyFactory.可调用对象将接收作为第一个参数的DependencyFactory本身,允许您在实例化自定义依赖项时从工厂获取其他依赖项。

命令获取应用程序中迁移的状态状态命令:

1
PHP bin/控制台原则:迁移:状态

这个命令将向您显示关于迁移状态的一般信息,例如已经执行了多少个迁移,哪些仍然需要运行,以及正在使用的数据库。

现在,您可以通过生成一个新的空白迁移类来开始处理迁移。稍后,您将了解Doctrine如何为您自动生成迁移。

1
PHP bin/控制台原则:迁移:生成

看一下新生成的迁移类,你会看到如下内容:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
声明(strict_types =1);名称空间DoctrineMigrations使用学说DBAL模式模式使用学说迁移AbstractMigration/** *自动生成迁移:请根据您的需要进行修改!* /最后Version20180605025653扩展AbstractMigration公共函数getDescription()字符串返回;}公共函数向上(模式模式无效//此up()迁移是自动生成的,请根据您的需要进行修改公共函数下来(模式模式无效//此down()迁移是自动生成的,请根据您的需要进行修改}}

如果你运行状态再次执行命令,它会显示你有一个新的迁移要执行:

1
PHP bin/控制台原则:migrations:status——show-versions

类型中添加一些迁移代码()而且下()方法,最后当你准备好时迁移:

1
PHP bin/控制台原则:迁移:迁移“DoctrineMigrations \ Version20180605025653”

有关如何编写迁移本身的更多信息(即如何填写()而且下()方法),参见官方的学说迁移欧宝官网下载app

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
声明(strict_types =1);名称空间应用程序迁移工厂使用学说迁移AbstractMigration使用学说迁移版本MigrationFactory使用ob娱乐下载组件DependencyInjectionContainerAwareInterface使用ob娱乐下载组件DependencyInjectionContainerInterfaceMigrationFactoryDecorator实现了MigrationFactory私人migrationFactory私人容器公共函数__construct(MigrationFactorymigrationFactory, ContainerInterface容器->migrationFactory =migrationFactory->容器=容器;}公共函数createVersion(字符串migrationClassNameAbstractMigration实例->migrationFactory->createVersion (migrationClassName);如果实例运算符ContainerAwareInterface) {实例->setContainer (->容器);}返回实例;}}

提示

如果您的迁移类实现了该接口ob娱乐下载Symfony \ \ DependencyInjection \ ContainerAwareInterface组件这个包将自动将默认的symfony容器注入到您的迁移类中(这是因为ob娱乐下载MigrationFactoryDecorator本例中显示的是该bundle使用的默认迁移工厂)。

用户实体并为Doctrine的ORM添加映射信息:

  • 注释
  • YAML
  • XML
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
/ / src /实体/ User.php名称空间应用程序实体使用学说ORM映射作为ORM/ * * *@ORM* \实体@ORM\表(name = " hello_user ") * /用户/ * * *@ORM\ Id *@ORM\列(type =“整数”)*@ORM\ GeneratedValue(策略=“汽车”)* /私人id/ * * *@ORM\Column(type="string", length=255) */私人的名字

有了这些信息,Doctrine现在已经准备好帮助你坚持你的新用户对象的用户表格当然,这个表还不存在!运行以下命令自动为该表生成一个新的迁移:

1
PHP bin/控制台原则:迁移:diff

您应该看到一条消息,说明基于模式差异生成了一个新的迁移类。如果您打开这个文件,您将发现它具有创建用户表格接下来,运行migration将表添加到数据库:

1
PHP bin/控制台原则:迁移:迁移

这个故事的寓意是:在对Doctrine映射信息进行每次更改之后,运行原则:迁移:diff命令自动生成迁移类。

如果你从项目的一开始就这样做(例如,即使第一个表是通过迁移类加载的),你总是能够创建一个新的数据库并运行迁移,以使你的数据库模式完全更新。事实上,对于您的项目来说,这是一个简单而可靠的工作流程。

如果您不想使用此工作流,而是通过原则:模式:创建,您可以告诉Doctrine跳过所有现有的迁移:

1
PHP bin/控制台原则:migrations:version——add——all

否则,Doctrine将尝试运行所有的迁移,这可能不会起作用。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。