什么是数据库迁移?
laravel 的简介是
数据库迁移就像是数据库的 版本控制,可以让你的团队轻松修改并共享应用程序的数据库结构。迁移通常与
Laravel
的数据库结构生成器配合使用,让你轻松地构建数据库结构。如果你曾经试过让同事手动在数据库结构中添加字段,那么数据库迁移可以让你不再需要做这样的事情。
Laravel Schema facade
对所有Laravel
支持的数据库系统提供了创建和操作数据表的相应支持。
1.创建一个数据库
可以在phpmyadmin 中或 在sql 控制台中创建一个 laravel5的数据库
2.修改.env 中的数据库信息
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=hostname
DB_USERNAME=username
DB_PASSWORD=password
3.生成迁移文件
laravel自身就有生成好的迁移文件,在书写新生成的迁移文件时可以相互对照。
迁移文件存放在database/migrations中
使用 Artisan
命令make:migration
来创建迁移:
// 创建一个新的迁移文件
// --create 将被创建的数据表.
// --table 将被迁移的数据表.
php artisan make:migration [--create[="..."]] [--table[="..."]] name
可以书写为
php artisan make:migration create_posts_table
php artisan make:migration create_posts_table --create=posts
4.编译迁移文件
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title',100)->default("");
$table->text('content');
$table->integer('user_id')->default(0);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
5.4的laravel 还不能自动生成down 中的代码5.5会自动生成可以少写一段
解释一下这个文件
up方法是为数据库添加新的数据表,字段或索引,而down方法则与up相反就是删除一个表一个字段
5.运行迁移
php artisan migrate
生成迁移文件时 会出现你的字段长了 1000 798 这样的提示,说你的string 字段没有设置出错, 但是有的表还是建了,或者就没有建的时候 ,要是建了就需要 把建了的表删除了, 不然以后每一次都会报错。
这个错误的解决方式有两种:
第一种就是看自带的migration 文件中的字段是否都设置了长度,如果没有就帮他设置上。
第二种就是修改默认的 string 的长度
一种是在app/Providers 的appServiceProvider.php 文件中的boot方法中添加
public function boot()
{
// 设置数据迁移中 string 的默认长度
Schema::defaultStringLength(250);
}
一种就是\vendor\laravel\framework\src\Illuminate\Database\Schema\Builder.php
中的 默认长度修改为 提示最大长度除四的结果。
public static $defaultStringLength = 255;
数据库回滚
数据库回滚有两种形式 和四种命令
一种就是删除表
//回滚最后一次迁移,但其中可以包含很多迁移文件
php artisan migrate:rollback
//也可以限制回滚个数
php artisan migrate:rollback --step=num
//num =1 如果是一起 migrate 的就会回滚最后一个文件中的表
// 0<num,num>文件次数 都是不会报错的。
//回滚所有的迁移
php artisan migrate:reset
一种就是重置数据库
//不仅会回滚数据库的所有迁移还会接着运行 migrate 命令
php artisan migrate:refresh
//同样可以 限制回滚个数
//php artisan migrate:refresh --step=num
//删除数据表并执行migrate
php artisan migrate:fresh
什么是数据填充
laravel 的简介是
Laravel 可以用
seed
类轻松地为数据库填充测试数据。所有的seed
类都存放在database/seeds
目录下。你可以任意为 seed 类命名,但是更应该遵守类似UsersTableSeeder
的命名规范。Laravel
默认定义的一个DatabaseSeeder
类。可以在这个类中使用call
方法来运行其它的seed
类从而控制数据填充的顺序。
database\factories\ 中的文件对数据填充时很重要的。
1.生成Post model 文件
php artisan make:model Post
2.生成PostsTableSeeder.php文件
php artisan make:seeder PostsTableSeeder
文件在\database\seeds\下
3.编辑PostsTableSeeder文件
public function run()
{
//
DB::table('posts')->insert([
['title'=>'测试一','content'=>'测试一'],
['title'=>'测试二','content'=>'测试二']
]);
}
}
4.执行seed命令
php artisan db:seed -class=PostsTablesSeeder
seed 命令是文件DataTablesSeeder
你也可以直接编译在里面(不建议)或者在 DataTablesSeeder编译
public function run()
{
// $this->call(UsersTableSeeder::class);
$this->call(PostsTableSeeder::class);
}
如果我们对内容没有要求
1.建立一个填充文件
(如Postfactorie)
php artisan make:factory PostFactory
2.编辑PostFactory文件
<?php
use Faker\Generator as Faker;
$factory->define(App\Post::class, function (Faker $faker) {
return [
'title' => $faker->sentence(6),
'content' => $faker->paragraph(10),
];
});
3.编译PostsTableSeeder文件
public function run()
{
//
factory(\App\Post::class)->times(10)->create();
}
4.执行 seed 命令
php artisan db:seed
也可以直接在Tinker 进行添加
php artisan tinker
factory(\App\Post::class,10)->create();
5.在数据迁移时,就直接把数据填充上
如果在数据迁移时,就直接把数据填充上岂不是更好。
根据laravel 数据迁移命令中 的参数可以 看出laravel 就有这样的准备
有三种命令就是
//迁移时填充
php artisan migrate -seed
//也可以直接写在 迁移文件中
// 回滚时也可以填充
php artisan migrate:refresh --seed
php artisan migrate:fresh --seed
//但是不能指定文件 所以还是要在DatabaseSeedr 文件中编译的
如果有错误,或者需要补充的欢迎留言。