Php Laravel迁移x Flyway迁移

Php Laravel迁移x Flyway迁移,php,sql,laravel,flyway,Php,Sql,Laravel,Flyway,在过去的两年里,我与CodeIgniter一起作为PHP框架和Flyway在一个项目中迁移.sql代码。它工作得很好,我推荐它 然而,一个新项目需要使用Laravel作为框架。所以,当我研究Laravel时,我发现它具有迁移功能 是否有人同时使用了这两种方法,并能分辨出每种方法的优缺点 在我的研究中,我发现以下列表: 拉雷维尔: -如果您想从mysql迁移到postresql或其他数据库,那么就不那么痛苦了; -可以使用原始SQL,但这是不自然的; -如果更改PHP框架,则需要移动迁移策略 飞行

在过去的两年里,我与CodeIgniter一起作为PHP框架和Flyway在一个项目中迁移.sql代码。它工作得很好,我推荐它

然而,一个新项目需要使用Laravel作为框架。所以,当我研究Laravel时,我发现它具有迁移功能

是否有人同时使用了这两种方法,并能分辨出每种方法的优缺点

在我的研究中,我发现以下列表:

拉雷维尔: -如果您想从mysql迁移到postresql或其他数据库,那么就不那么痛苦了; -可以使用原始SQL,但这是不自然的; -如果更改PHP框架,则需要移动迁移策略

飞行路线 -非常容易使用; -它只使用原始SQL,具有所有优点; -保持PHP和数据库代码分离; -从mysql到其他数据库的改变是痛苦的

现在,我使用Mysql和Jenkins实现自动化


还有什么建议吗?

我想你们两个都可以。当您希望跟踪模式随时间的变化并确保这些变化不会破坏您的生产环境时,Flyway功能强大。它还为您的生产环境提供了一些安全性,防止在某些“聪明”的devops人员修改生产数据库以“修复”问题时发生DB升级

确保数据库更改被跟踪、验证并以正确的顺序应用是它如此强大的原因。作为开发人员,您不必编写大量的基础设施来跟踪数据库本身的模式更改。Flyway会帮你解决这个问题

尽管如此,在测试周期内插入数据可能不是最好/最容易/最方便的方法。混合方法可能更容易,但我甚至在java/spring环境中加入了flyway,以验证模式更改并填充测试数据

开发人员经常需要对模式进行更改,flyway在提供基础设施方面非常出色,可以防止冲突,并使道路变得平坦和可验证

由于数据库中的版本控制,可以审核更改并验证当前数据库的版本,即,应用了哪些模式更改以及何时应用。我无法告诉你我在没有这种跟踪的软件项目上工作过多少次。这使得在没有大量查询和调查的情况下,无法确定数据库处于何种状态。在发现flyway之前,我参与过的项目中的开发人员通常会启动他们自己的数据库版本控制,因为如果没有它,就不可能知道部署软件的人是否遗漏了一个步骤,从而导致升级失败。“哦!我忘了运行添加新列约束的sql脚本!”


Flyway承担了所有这些不确定性,并使其变得确定。如果Laravel的迁移功能和flyway一样强大,那么最好使用框架中的功能。但可能不是这样,混合方法会给你带来最好的总体平静。

我认为两者都可以使用。当您希望跟踪模式随时间的变化并确保这些变化不会破坏您的生产环境时,Flyway功能强大。它还为您的生产环境提供了一些安全性,防止在某些“聪明”的devops人员修改生产数据库以“修复”问题时发生DB升级

确保数据库更改被跟踪、验证并以正确的顺序应用是它如此强大的原因。作为开发人员,您不必编写大量的基础设施来跟踪数据库本身的模式更改。Flyway会帮你解决这个问题

尽管如此,在测试周期内插入数据可能不是最好/最容易/最方便的方法。混合方法可能更容易,但我甚至在java/spring环境中加入了flyway,以验证模式更改并填充测试数据

开发人员经常需要对模式进行更改,flyway在提供基础设施方面非常出色,可以防止冲突,并使道路变得平坦和可验证

由于数据库中的版本控制,可以审核更改并验证当前数据库的版本,即,应用了哪些模式更改以及何时应用。我无法告诉你我在没有这种跟踪的软件项目上工作过多少次。这使得在没有大量查询和调查的情况下,无法确定数据库处于何种状态。在发现flyway之前,我参与过的项目中的开发人员通常会启动他们自己的数据库版本控制,因为如果没有它,就不可能知道部署软件的人是否遗漏了一个步骤,从而导致升级失败。“哦!我忘了运行添加新列约束的sql脚本!”


Flyway承担了所有这些不确定性,并使其变得确定。如果Laravel的迁移功能和flyway一样强大,那么最好使用框架中的功能。但可能不是这样,混合方法会给你带来最好的总体平静。

从你的描述中——我不得不承认我对Flyway一无所知——我会得出结论,Laravel提供了更强大的系统,因为你基本上可以同时做到这两个方面?!如果您想在Laravel中使用Flyway方法(纯
.sql
文件),例如,您可以创建一个自定义命令,创建一个或两个
.sql
文件(向上和向下),外加一个迁移文件,该文件只执行这两个文件(不需要任何手动更改)。不过,我个人会坚持框架约定,它使每个人的生活都更轻松(即板载过程)。使用Laravel迁移的另一个优点是,它更容易编写现成的DB单元测试。e、 g.RefreshDatabase trait在幕后调用并跟踪laravel迁移。尽管如此,我个人还是更喜欢flyway。事实上,将sql与代码分离已经是一大优势。公共关系