乐虎游戏|乐虎国际登录|欢迎你

《Thinkphp5入门系列课程》第十一课:Migration(一)

日期:2020-01-30编辑作者:计算机资讯

Thinkphp5视频教程

前言

Migration(迁移), 其实就是Active Record对数据库结构的操作,通过Migration无需在使用SQL命令来修改数据库.使用简单的Ruby DSL 就能对数据表进行修改.

  在开发数据库应用程序的时候,经常会遇到某些表需要添加字段或者修改类型、新增表等需求,而对于EF Code First来说关注的只有实体类,当需求变更时只需要添加新的实体类或者在实体类中添加、删除、修改属性即可。但是修改完成之后要如何将修改同步到数据库中?

  • Migration初识
  • thinkphp5 使用 Migration

1.Migration迁移文件命名

文件位置在"db/migrate"
一个Migration文件的文件名类型如下:

YYYYMMDDHHMMSS_create_products.rb
20080906120001_add_details_to_products.rb

这两个文件名中的迁移类的名称是用驼峰式的命名规则:

# YYYYMMDDHHMMSS_create_products.rb
class CreateProducts < ActiveRecord::Migration[5.1]
end
# 20080906120001_add_details_to_products.rb
class AddDetailsToProducts < ActiveRecord::Migration[5.1]
end

  Entity Framework提供了Migrations机制来解决这一问题。

乐虎国际登录,什么是Migration?

2.创建Migration

  本文要点:

migration用谷歌翻译是移民的意思,在PHP中我们将它理解为迁移,将Migration用在数据库上就理解为数据库迁移咯。在migration开发之前,我们都是手写SQL创建表语句,创建成功之后需要手动在数据库执行,项目初始化光数据库的创建就花费很多时间。另外在多人团队开发中,如果要求每个开发人员都在本地使用数据库那么我们通常都是将数据库备份成SQL文件互相传递,这还并不是很繁琐,繁琐的在于如果数据库某个表的字段出现变动那么就需要将这个变动的SQL语句传给每个开发小伙伴让他们在本地都手动的更新下,一次可以这样,但是多次呢?我想在开发团队中这种事情肯定让人头疼咯,所以migration就诞生咯。Migration就是一些管理数据库结构的文件,这些文件其实都是抽象化的SQL,可以通过命令行执行而改变数据库的结构,这些文件都是存放在项目下的,随着项目版本的迭代而迭代。在开发过程中,如果一位小伙伴改动了数据库的表结构,她只需要生成一个migration文件并推送到版本控制系统中,如:Git,并通知其他小伙伴,其他小伙伴只需要pull然后在命令行执行下migration命令就可以了,简化了传统的数据库变动流程,加快项目的开发。

2.1创建空Migration
$ rails g migration CreateUsers

这个命令会创建一个空Migration(迁移)

class CreateUsers < ActiveRecord::Migration[5.1]
  def change
    create_table :users do |t|
    end
  end
end

  ●启用Migrations
  ●通过Add-Migration添加Migration
  ●Update-Database更新数据库
  ●更新模型并添加新的Migration
  ●启动应用时自动将数据库更新至最新版本
  ●关于Automatic Migrations(自动迁移)

Migration文件作用

2.2 添加字段

email如果不指定数据类型默认为string

$ rails g migration AddEmailToUsers email

生成一个名为YYYYMMDDHHMMSS_add_email_to_users.rb的迁移
上面的命令等效于:

$ rails g migration AddEmailToUsers email:string

这个命令给users表添加一个email字段。

class AddEmailToUsers < ActiveRecord::Migration[5.1]
  def change
    add_column :users, :email, :string
  end
end

当Migration的名称为AddXXXToYYYRemoveXXXFromYYY 的形式时,会自动生成包含合适的 add_columnremove_column 语句。

启用Migrations

  在VS中的Package Manager Console窗口中选择默认项目为DbContext存在的项目,并执行命令:
  enable-migrations

  乐虎国际登录 1

  然后项目中将生成Migrations目录和Configuration类型:

  乐虎国际登录 2

  乐虎国际登录 3

  构造方法:用于对一些Migrations相关的配置,如上代码就是禁用了自动迁移。
  Seed方法:根据注释可知在迁移后执行,一般用来添加默认数据。Configuration类型可以根据需求进行修改。

  注:如过出现以下错误,可把命名空间删除修复:

   乐虎国际登录 4

migration 文件的主要作用就是用来管理数据库的结构,其实它是一组SQL语句的抽象化,migration 文件可以创建表,删除表,增加字段,删除字段等等基本上所有的数据库操作,其实这就像你自己手动写SQL语句一样,只不过在 migration 中你不需要手动的写SQL语句,只需要按照它的规则语法调用一下就可以啦。

2.3创建删除字段的Migration
$ rails g migration RemoveEmailFromUsers email:string

class RemoveEmailFromUsers < ActiveRecord::Migration[5.1]
  def change
    remove_column :users, :email, :string
  end
end

通过Add-Migration添加Migration

  如果已经存在数据库那么需要使用–IgnoreChanges参数来创建一个空的Migration来对应当前的数据库模型:
  Add-Migration InitialCreate –IgnoreChanges

  乐虎国际登录 5

  这时在Migrations目录下会生成一个带时间戳的InitialCreate.cs文件:

  乐虎国际登录 6

  注:上面的代码的Up和Down方法之所以为空是因为使用了–IgnoreChanges参数,因为数据库中已经有对应的表和字段,所以不应该再创建一次,如果去掉该参数会生成以下代码:

  乐虎国际登录 7

 

本文由乐虎游戏发布于计算机资讯,转载请注明出处:《Thinkphp5入门系列课程》第十一课:Migration(一)

关键词:

高并发一些处理办法

使用思维导图的场景无处不在,无论是做产品还是做设计,我们都需要清晰的思路,明确自己需要做些什么,最后需...

详细>>

Nginx安装第三方模块

nginx文件非常小,但是性能非常的高效,这方面完胜apache,nginx文件小的一个原因之一是nginx自带的功能相对较少,好在n...

详细>>

缘何本身要称本身为Javascript程序猿

尝试百度"PHP是最好的语言",发现指向较多的是那个关于程序员的笑话。但是如果这个梗来自于这个笑话的话,那么为...

详细>>

ThinkPHP5

本篇,我们的目标有三个: 主要: 一、TP5的目录结构和规范 project 应用部署目录 ├─application 应用目录(可设置)...

详细>>