Laravel 数据库迁移
[toc]
生成数据库迁移文件
php artisan make:migration create_test_table
生成的数据库迁移文件位于 database/migrations 下
2019_08_01_153300_create_test_table.php
每个迁移文件名都包含时间戳,以便让 Laravel 确认迁移的顺序。
php artisan make:migration create_test_table --create=tests
php artisan make:migration add_text_to_test_table --table=tests
指定表名称为tests
如果你想要指定生成迁移指定一个自定义输出路径,则可以在运行 make:migration 命令时添加 --path 选项,给定的路径必须是相对于应用程序的基本路径。
编辑迁移文件
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateSectionTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('test', function (Blueprint $table) {
$table->increments('id');
$table->string('name','255');
$table->text('content')->nullable();
$table->integer('bigclass')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('section');
}
}
迁移文件中有两个方法 up down
up用于创建表或者添加字段
down与up相反
创建表 字段
Schema::create('test', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
});
上面这一段表示
创建test表
创建自增的id字段
创建 相当于可空的 created_at 和 updated_at字段 laravel在对表进行操作时一般会对这两个字段进行自动维护
Schema::table('test', function (Blueprint $table) {
$table->string('email')->nullable();
});
上面这段表示
在表test创建一个可空的email字段 字段类型为varchar
具体字段类型列表查看Laravel文档
nullable()为字段修饰 其他字段修饰类型查看Laravel文档
删除表
若要重命名数据表,可以使用 rename 方法:
Schema::rename($from, $to);
删除一个已存在的数据表, 可使用 drop 或 dropIfExists 方法:
Schema::drop('users');
Schema::dropIfExists('users');
修改字段
先决条件
在修改字段之前,请确保将 doctrine/dbal 依赖添加到 composer.json 文件中。Doctrine DBAL 库用于确定字段的当前状态, 并创建对该字段进行指定调整所需的 SQL 查询:
composer require doctrine/dbal
change 方法可以将现有的字段类型修改为新的类型或修改属性。
比如,你可能想增加。字符串字段的长度,可以使用 change 方法把 name 字段的长度从 25 增加到 50:
Schema::table('test', function (Blueprint $table) {
$table->string('name', 50)->change();
});
我们应该将字段修改为可空:
Schema::table('test', function (Blueprint $table) {
$table->string('name', 50)->nullable()->change();
});
{注} 只有下面的字段类型能被 "修改": bigInteger、 binary、 boolean、date、dateTime、dateTimeTz、decimal、integer、json、 longText、mediumText、smallInteger、string、text、time、 unsignedBigInteger、unsignedInteger and unsignedSmallInteger。
重命名字段
可以使用结构生成器上的 renameColumn 方法来重命名字段。在重命名字段前 , 请确保你的 composer.json 文件内已经加入 doctrine/dbal 依赖:
Schema::table('test', function (Blueprint $table) {
$table->renameColumn('email', 'mail');
});
删除字段
可以使用结构生成器上的 dropColumn 方法来删除字段。 在从 SQLite 数据库删除字段前,你需要在 composer.json 文件中加入 doctrine/dbal 依赖并在终端执行 composer update 来安装该依赖:
Schema::table('test', function (Blueprint $table) {
$table->dropColumn('email');
});
你可以传递一个字段数组给 dropColumn 方法来删除多个字段:
Schema::table('test', function (Blueprint $table) {
$table->dropColumn(['email', 'text', 'text2']);
});
执行迁移
php artisan migrate
删除所有表 & 迁移
The migrate:fresh 命令会从数据库中删除所有表,然后执行 migrate 命令:
php artisan migrate:fresh
php artisan migrate:fresh --seed