很多人可能在学习Laravel框架的时候,对Laravel的数据库迁移(以下简称Migration)存在着疑惑:到底什么是Migration?为什么要用Migration?Migration到底方便在哪里?
好了,抱着这些问题,我们今天就一起来学习Migration。
问题1:什么是Migration?
回答:可以将Migration看作一种数据库的VCS(Version Control System),即版本控制系统。可以通过Laravel的artisan命令快速创建或还原Migration文件,来进行数据库的构架。
问题2:为什么要用Migration?
回答:使用Migration可以有效地对数据库进行版本控制,并且遵从了Single Responsibility Principle(单一职责原则),更加方便数据库的操控。
问题3:Migration到底方便在哪里?
基本不需要写SQL代码就能简单快速地组建起数据库结构,并且可以迅速Migrate或者Rollback,实现了数据库的版本控制和管理。
要使用Migration,我们可以用artisan命令来创建一个Migration文件:
# 先进入我们的Laravel项目的根目录
$ cd my-laravel-project
# 输入以下artisan命令
$ php artisan make:migration create_samples_table --create=samples
注意--create==samples
这个选项会告诉artisan我们是要建立一个新的名为samples
的table
,所以artisan
会自动在database\migrations
目录下建立一个叫2017_03_13_061422_create_samples_table.php
的文件(其中前缀是创建该文件的日期和时间,所以每个人会稍有不同),并且会自动填充好Schema::create
这个方法,方便我们创建更多的column
:
可以看到,Laravel
已经为我们添加了三个Columns
,一个是id
,另外两个分别是由$table->timestamps()
创建的created_at
和updated_at
(类型是DATETIME
)。
Laravel
默认假设每个table
都会存在一个id column
,并且要求每个table都要有created_at
和updated_at
这两个column
。
如果我们要在samples
里新增加一个叫my_sample_code
的VARCHAR
类型的column
,我们该怎么做呢?
很简单,只需要加上这行:
$table->string('my_sample_code');
如果我们想限制VARCHAR
的长度,那么可以在第二个参数中进行添加:
$table->string('my_sample_code', 100);
那么我们现在有了migration文件了,怎么样才能在数据库里建立起我们的samples
table呢?
只需要在我们的Laravel根目录下运行一个简单的artisan命令:
$ php artisan migrate
Voila! 大功告成!
现在我们在数据库里,就能看到一个叫samples
的table
了。
那么如果我们想对这个table进行修改或者添加其他column呢?
那么我们有两种选择:
第一种,如果刚刚建立起table,并没有数据,可以选择rollback或者reset,即使用
$ php artisan migrate:rollback
或者
$ php artisan migrate:refresh
值得注意的是,rollback
这个命令默认选项只会向之前恢复一次migration
,而refresh
将会把所有migration
全部重置,相当于
$ php artisan migrate:reset
$ php artisan migrate
其中reset
命令会将所有的migration rollback
到最初阶段。
第二种方法,就是再创建一个migration
文件。但是我们需要先添加一个dependency
。打开项目根目录下的composer.json
文件,在require
栏中添加doctrine/dbal
这个package
:
"require": {
"php": ">=5.6.4",
"laravel/framework": "5.4.*",
"laravel/tinker": "~1.0",
"doctrine/dbal": "2.5.0"
},
接下来运行composer install
这个命令即可。
好了,如过我们想把之前我们添加的my_sample_code
这个column长度限制为200,那么我们可以建立一个新的migration文件:
$ php artisan make:migration modify_samples_table --table=samples
其中我们在Schema::table函数中填入以下代码:
$table->string('my_sample_code', 200)->change();
然后再次运行migrate,就是这么简单:
$ php artisan migrate
那么如果我们想把这个column
改成其他类型呢?比如我们想将其换成TEXT
类型,那么需要怎么做呢?
$table->text('my_sample_code')->change();
再次运行migrate即可!
可以看到,my_sample_code
这个column已经变成了TEXT类型。
以上就是Laravel
数据库迁移的基本技巧!有问题欢迎共同探讨。