## 第3节数据库迁移与数据填充
在上一小节中,我们已经使用过了数据迁移工具(Migration),在这一小节中,我们自己定义一个迁移文件。
### 数据库迁移
我们要创建一个 articles 的表,那么迁移的命令是:
~~~
php artisan make:migration create_articles_table
~~~
输入这条命令后会在 `D:\wamp\www\newblog.com\database\migrations\` 目录下,生成一个迁移文件`2017_04_21_061247_create_articles_table`
~~~
Administrator@STU-PC MINGW32 /d/wamp/www/newblog.com (auth)
$ php artisan make:migration create_articles_table
Created Migration: 2017_04_21_061247_create_articles_table
~~~
下面我们来查看这个文件:
~~~
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateArticlesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
~~~
一个迁移类会包含两个方法:up 和 down。up 方法可为数据库增加新的数据表、字段、或索引,而 down 方法则可简单的反向运行 up 方法的操作。
更多相关知识可以查看手册:<http://d.laravel-china.org/docs/5.2/migrations#generating-migrations>
运行这条命令:
~~~
php artisan migrate
~~~
这样就生成了一个 `atricles` 表。
![](https://box.kancloud.cn/aec1a43e204799233fab87f6f9a80af9_1101x332.png)
### 数据填充文件
表中还没有任何数据,我们可以使用 数据填充: `artisan 生成 Seeder`。
运行下面的命令,生成 Seeder:
~~~
php artisan make:seeder ArticleSeeder
~~~
会自动生成一个文件:`D:\wamp\www\newblog.com\database\seeds\ArticleSeeder.php`
~~~
<?php
use Illuminate\Database\Seeder;
class ArticleSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}
~~~
如何编写数据填充,可以查看这里:<http://d.laravel-china.org/docs/5.2/seeding#writing-seeders>
### Article 模型
我们要使用 Eloquent ORM 模型去操作数据库,大家可以通过这个链接了解:<http://d.laravel-china.org/docs/5.2/eloquent>
创建 Article Model 输入下面的命令:
~~~
php artisan make:model models/Article
~~~
生成的 Atricle 类在:`D:\wamp\www\newblog.com\app\models\Article.php`
~~~
<?php
namespace App\models;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
//
}
~~~
到这里,我们再来完善 Seeder 数据填充的编写:
~~~
public function run()
{
DB::table('articles')->delete();
for ($i=0; $i < 10; $i++) {
\App\Models\Article::create([
'title' => 'Title '.$i,
'body' => 'Body '.$i,
'user_id' => 1,
]);
}
}
~~~
接下来,把 ArticleSeeder 注册到系统内。
修改 `D:\wamp\www\newblog.com\database\seeds\DatabaseSeeder.php`
~~~
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// $this->call(UsersTableSeeder::class);
$this->call(ArticleSeeder::class);
}
}
~~~
执行命令,即完成了数据的导入:
~~~
php artisan db:seed
~~~
此时,我们在`phpmyadmin`工具中查看:
![](https://box.kancloud.cn/f7342c13c6a84b9d634cbb94c9b6da99_833x756.png)
被插入了10条数据!
### 提交更新到 github
这里的提交步骤和上一小节一样,就不在重复。
我们把该分支合并到master主分支。
~~~
git status
git branch -a
git checkout master
git merge auth
git push
git branch -d auth
~~~
备注:使用 `git status` 查看当前工作区是否为空。
![](https://box.kancloud.cn/1e6435ece205540358d8cf648cebec66_963x728.png)