Laravel数据库迁移(Database Migration)操作实例

来源:互联网 发布:网络诈骗真实案例 编辑:程序博客网 时间:2024/05/22 18:21

很多人可能在学习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_table

Create Migration

注意--create==samples_table这个选项会告诉artisan我们是要建立一个新的名为samples的table,所以artisan会自动在database\migrations目录下建立一个叫2017_03_13_061422_create_samples_table.php的文件(其中前缀是创建该文件的日期和时间,所以每个人会稍有不同),并且会自动填充好Schema::create这个方法,方便我们创建更多的column:

Create Samples Table

可以看到,Laravel已经为我们添加了三个Columns,一个是id,另外两个分别是由$table->timestamps()创建的created_at和updated_at(类型是DATETIME)。

Laravel默认假设每个table都会存在一个id column,并且要求每个table都要有created_at和updated_at这两个column。

如果我们要在samples table里新增加一个叫my_sample_code的VARCHAR类型的column,我们该怎么做呢?

很简单,只需要加上这行:

$table->string('my_sample_code');

如果我们想限制VARCHAR的长度,那么可以在第二个参数中进行添加:

$table->string('my_sample_code', 100);

Schema::Create


那么我们现在有了migration文件了,怎么样才能在数据库里建立起我们的samplestable呢?

只需要在我们的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,就是这么简单!

那么如果我们想把这个column改成其他类型呢?比如我们想将其换成TEXT类型,那么需要怎么做呢?

$table->text('my_sample_code')->change();

再次运行migrate即可!

Samples Table Change Column Type

可以看到,my_sample_code这个column已经变成了TEXT类型。

以上就是Laravel数据库迁移的基本技巧!有问题欢迎共同探讨。

0 0
原创粉丝点击