说明
以前我们团队进行开发,如果数据库结构修改,就要从MySQLWorkbench把整个库或某个表的SQL语句导出来再提交到git, 别人用SQL语句重建某个库或某个表,这样好麻烦。Laravel Migrations就可以避免做这件事。只需要获取到migrations的文件,再migrate就可以了,而且还可以rollback。
数据库配置
在.env文件配置数据库环境的信息。
相关的migrate命令
-
创建migrations表记录相关的动作
php artisan migrate:install
-
更新数据库信息
php artisan migrate
-
回滚migrate操作 php artisan migrate:rollback
-
回滚到所有的migrate操作之前 php artisan migrate:reset
-
回滚到最开始的时候然后运行所有的mirgrations
php artisan migrate:refresh
-
查看migration状态
php artisan migrate:status
-
创建migration文件
php artisan make:migration 创建的所有文件在 database/migrations目录下
-
查看帮助
php artisan help make:migration
-
指定创建的migration文件名
php artisan make:migration create_admins_table
-
创建migration指定创建数据库表名
php artisan make:migration create_authors_table --create=authors 执行这个命令生成的代码, up 和 down方法自动填充了相关创建表和删除表的代码
-
创建migration指定修改的数据库表名
php artisan make:migration set_email_to_unique_on_authors_table --table=authors 执行这个命令生成的代码, up 和 down自带了指定表名的代码
-
migrations文件
所有的migrations文件在database/migrations目录下。
每个migration文件都有两个方法: up & down,up 表示执行migrate时候要执行的操作,down表示回滚up方法所进行的操作。这两个方法需要自行编写。
一般在up方法定义数据表结构, 例如:
public function up()
{
Schema::create('authors', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
});
}
直接用$table的相关方法设置数据表结构,相关的方法见Laravel 5的文档migrations节。
migrations文件中表的相关操作
-
判断表是否存在
if (Schema::hasTable('users')) { }
-
指定connection
Schema::connection('foo')->create('users', function ($table) { $table->increments('id'); });
-
指定数据库引擎
Schema::create('users', function ($table) { $table->engine = 'InnoDB'; $table->increments('id'); });
-
重命名
Schema::rename($from, $to);
-
删除表
Schema::drop('users'); Schema::dropIfExists('users');
migrations文件中列的相关操作
-
创建列
Schema::create('authors', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); });
-
判断列是否存在
if (Schema::hasColumn('users', 'email')) { }
-
修改列 — 使用change方法
Schema::table('users', function ($table) { $table->string('name', 50)->change(); });
-
重命名列
Schema::table('users', function ($table) { $table->renameColumn('from', 'to'); });
-
删除列
Schema::table('users', function ($table) { $table->dropColumn('votes'); $table->dropColumn(['votes', 'avatar', 'location']); });
migrations文件中索引的相关操作
-
创建索引
-
唯一性索引 — 使用unique方法
$table->string('email')->unique();
-
复合索引
$table->index(['account_id', 'created_at']);
-
主键索引
$table->primary('id'); $table->primary(['first', 'last']);
-
普通索引
$table->index('state');
-
-
删除索引
必须提定索引的名称,索引的名称: 表名字段名索引类别
-
删除主键索引
$table->dropPrimary('users_id_primary');
-
删除唯一索引
$table->dropUnique('users_email_unique');
-
删除普通索引
$table->dropIndex('geo_state_index');
-
migrations文件中外键的相关操作
-
创建外键
在posts表中创建个user_id字段跟users表的id字段做外键约束
Schema::table('posts', function ($table) { $table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users'); });
-
删除外建
外键的名称: 表名_外键字段_foreign $table->dropForeign('posts_user_id_foreign');
参考的文档
http://laravel.com/docs/5.1/migrations