Laravel框架中数据库和数据库迁移简单分析

发布时间 - 2018-07-31 00:00:00    点击率:

laravel框架的开发方式有着敏捷、迭代的特点,并不指望在第一次就获得所有正确的代码。相反,我们编写代码、测试和与我们的最终用户进行交互,并完善我们的理解。

对于工作,我们需要一个配套的实践集。我们使用像subversion、GIT或Mercurial这些版本控制工具来存储应用程序的源代码文件,使我们能够撤消错误和追踪开发过程中的改变。

但应用程序更改时,存在我们不能单独使用版本控制进行有效管理的区域。在我们的开发进度中,Laravel应用程序的数据库架构不断演变:我们在这里添加了一个表,在那里重命名列,删除索引等等。数据库的改变与应用程序代码步调一致。

你需要一个复杂的方法来跟踪您的数据库架构更改,通常有几种方法:

  • 当您在开发团队内工作时,每人都需要知道关于任何架构的更改。

  • 当你在生产服务器上部署时,您需要有稳健的方式来升级您的数据库架构。

  • 如果您在多台机器上工作,你需要保持所有数据库架构的同步。

如果没有严格的约定和纪律让应用程序开发者遵循,保持数据库架构与应用程序代码同步历来是一个非常麻烦的工作。开发者(或数据库管理员) 进行所需的架构更改。但是,如果应用程序代码回滚到以前的版本,但是很难撤消数据库架构更改,照成数据库版本信息与应用程序代码版本信息不一致。

迁移就是帮助你进化你的应用程序数据架构的Laravel方式,它不需要你在每次改变的时候删除或者重建数据库。没有删除和重建就意味着你不会在每次改变的时候丢失数据。当你执行迁移时唯一的改变就是将数据库架构从一个版本移到另一个版本,不管是向前还是向后移。

Laravel迁移给你提供了一种在迭代方式中修改数据库架构的手段,它不要你用SQL操作,而是允许你使用PHP代码。Laravel架构生成器允许我们快速创建数据库表和插入列或索引。它使用清洁和富有表现力的语法来操作数据库。你也许为认为Laravel迁移就是数据库的版本控制。

通过定义一个更高级别的接口来创建和维护数据库架构,你可以用与数据库无关的方式定义它。通过使用 PHP 来创建表,定义列和索引,写一次架构并将其应用到任何所支持的数据库后端。额外的好处是 ,Laravel 跟踪已经应用了哪些迁移和哪些仍需要应用。

迁移基础知识

一个Laravel迁移仅仅是你应用程序app/database/migrations目录下的PHP源文件。每个文件都包含了对底层数据库的一组改变。对数据库的改变是在PHP代码中而不是数据库特定的SQL。你的PHP迁移代码最终被转换成符合你当前数据库的DDL,这使得切换数据库平台非常的容易。由于迁移代码保存在自己的目录中,就务必要像其他的项目代码一样包含到版本控制里面。Laravel迁移是使用Artisan工具用命令行显示运行的。

迁移文件命名约定

在旧版本Laravel的,迁移的文件有比较简单的名字,如001_create_employees_table.php 。 Laravel 3(Laravel 4.1和其相同)带来了新的命名约定,其中名称的第一部分从一个序列号变更为更长的时间,像2014_03_11_032903_create_employees_table.php。该文件的名称的形式YYYY_MM_DD_HHMMSS_some_meaningful_name.php的,也就是说一个UTC时间戳识别后跟一个迁移名。

新的更宽的名字有助于避免名称冲突,如果你是工作在一个团队里的一个开发人员,你可以检查自己的迁移。

此外, Laravel迁移文件的时间戳,以便他们可以顺序执行。时间戳数字是迁移的关键,因为它们定义了哪一个迁移应用在独立迁移版本号的顺序。

想SQL脚本,迁移从顶部开始执行,这更加需要这些文件才能被执行。顺序执行移除了类似这样的可能性——在表不存在的时候尝试插入列。

尽管你可以手动创建迁移文件,但是使用Artisan工具生成迁移脚本更加的容易(并且不易出错)。你可以根据需要在以后编辑这些文件。

运行迁移Forward 和 Backward

使用Artisan工具迁移到数据库。Laravel提供了一套artisan任务,可以归结为运行特定的几套迁移。

[注]你可以运行artisan list同查看artisan支持的任务列表,大多数数据迁移相关的任务都带有前缀migrate:

只有几个你需要知道的常见任务:

  • migrate:install
    你第一次使用的与迁移有关的artisan任务可能就是migrate:install。在内部,Laravel使用特殊的表来跟踪哪些迁移已经运行。若要创建此表,只需要用artisan命令行工具:
    $php artisan migrate:install

  • migrate
    你将会运行migrate任务频繁的更新你的数据库,以支持你添加到应用程序中的最新的表和列。最基本的形式,它只会对那些所有没有被运行过的迁移运行up()方法。如果没有这样的迁移,会退出。它将基于迁移的日期来运行这些迁移。

  • migrate:rollback
    在写迁移时偶尔也会犯错误。如果你已经运行了迁移,那么你不能只是编辑迁移和再次运行迁移:Laravel假定它已经运行了迁移,那么当你再次运行artisan migrate,不会做任何事情。你必须使用artisan migrate:rollback回滚迁移,然后编辑迁移,再运行artisan migrate去运行正确的版本。

一般情况下,编辑现有的迁移不是好主意:你和你的同事将会需要额外的工作,并且这是一件让人头痛的事——如果现存版本的迁移已经运行在生产机器上。相反,你需要写一个新的迁移去执行所需的改变。

[注]artisan migrate:rollback 会删除上次的迁移应用。Laravel回去整个迁移“操作”。因此,如果上次的迁移命令运行了15个迁移,这15个迁移都会被回滚。请注意,当你删除列或者表,会丢失数据。

migrate:reset
回滚所有的迁移(会删掉所有表和数据)

migrate:refresh
artisan migrate:refresh任务将删除数据库、 重新创建它并将加载当前架构。这是一个方便快捷方式去运行重置并随后重新运行所有迁移。

migrate:make
artisan migrate:make命令告诉 Laravel 来生成一个迁移文件骨架 (这是实际上是一个 PHP 文件) ,存放到app/database/migrations文件夹中。然后,您可以编辑此文件来充实您的表/索引定义。然后,artisan migrate命令运行时,artisan会查询此文件来生成 SQL DDL 的实际代码。

相关推荐:

laravel5如何通过freetds来连接到sqlserver(代码)


# 应用程序  # 你可以  # 您的  # 当你  # 自己的  # 这是  # 将会  # 你在  # 所需  # 如果没有 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel如何优化应用性能?(缓存和优化命令)  Mybatis 中的insertOrUpdate操作  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  高端建站如何打造兼具美学与转化的品牌官网?  Laravel如何配置和使用缓存?(Redis代码示例)  如何在万网ECS上快速搭建专属网站?  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  如何在阿里云香港服务器快速搭建网站?  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Laravel如何实现用户注册和登录?(Auth脚手架指南)  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  PHP正则匹配日期和时间(时间戳转换)的实例代码  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  昵图网官方站入口 昵图网素材图库官网入口  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel如何使用withoutEvents方法临时禁用模型事件  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  如何快速启动建站代理加盟业务?  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  如何基于PHP生成高效IDC网络公司建站源码?  javascript中闭包概念与用法深入理解  如何用5美元大硬盘VPS安全高效搭建个人网站?  Laravel怎么实现验证码(Captcha)功能  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  Bootstrap CSS布局之列表  网页设计与网站制作内容,怎样注册网站?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  Laravel如何创建自定义Facades?(详细步骤)  七夕网站制作视频,七夕大促活动怎么报名?  Android自定义listview布局实现上拉加载下拉刷新功能  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何用y主机助手快速搭建网站?  EditPlus中的正则表达式实战(5)  ,在苏州找工作,上哪个网站比较好?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  浅谈Javascript中的Label语句  装修招标网站设计制作流程,装修招标流程?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  如何在阿里云通过域名搭建网站?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Bootstrap整体框架之JavaScript插件架构