Laravel框架 数据库迁移文件简单例子
1. 创建数据表
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
class CreateTableNameTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// 建议先判断数据表是否创建
if (!Schema::hasTable('table_name')) {
Schema::create('table_name', function (Blueprint $table) {
// 默认创建名为"id"的bigint(20)的自增无符号主键字段
$table->id();
// 自增字段,默认为主键.也可用->primary()设置;
// $table->increments('primary_id')->comment('主键ID');
// $table->integer('primary_id')->unsigned()->primary()->comment('主键ID'); // 同上作用
$table->string('string', 50)->nullable(true)->default('')->comment('varchar类型字段,可空');
$table->char('last_ip', 15)->default('')->comment('char类型字段');
$table->integer('int')->default(0)->comment('int类型字段,默认10位');
$table->tinyInteger('tinyint')->default(0)->comment('tinyint类型字段,默认3位');
$table->unsignedInteger('unsigned_int')->default(0)->comment('无符号int类型字段,默认10位');
// $table->integer('int')->unsigned()->default(0)->comment('无符号int类型字段,默认10位'); // 同上的作用
$table->unsignedTinyInteger('unsigned_tinyint')->default(0)->comment('无符号tinyint类型字段,默认3位');
// $table->tinyInteger('tinyint')->unsigned()->default(0)->comment('无符号tinyint类型字段,默认3位'); // 同上的作用
// 设置大于10位的整数建议使用bigint类型
$table->bigInteger('big_int')->nullable(false)->default(0)->comment('bigint类型字段,不能为空,,默认20位');
// 创建时间
$table->timestamp('paid_at')->nullable(true);
// 自动创建两个额外的列,即created_at和updated_at。这些列用于记录模型的创建时间和最后更新时间。timestamp类型
$table->timestamps();
// 用于实现软删除功能。当你调用模型的delete()方法时,该记录的deleted_at列会被设置为当前时间戳,表示该记录已被删除。软删除可以帮助你保留数据的完整性,并且可以方便地恢复或永久删除记录。
$table->softDeletes();
// 创建索引
$table->index('string');
// $table->index('int', 'unique');// 唯一索引
});
// 数据表的注释只能额外处理
DB::statement(sprintf(
"ALTER TABLE `%s%s` comment'%s'",
config('database.connections.mysql.prefix'),
'table_name',
'创建案例表'
));
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('table_name');
}
}
2. 新增数据表字段
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddColumnNameToTableName extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// 判断字段是否存在,按需自取
// 可以添加多个字段
// Schema::hasColumn('table_nam', 'column_name')
Schema::table('table_nam\e', function (Blueprint $table) {
// 创建一个名为 column_name 的varchar类型字段,将其放置在 paid_at 字段之后,并设置默认值为空字符串;
$table->string('column_name')->after('paid_at')->default('')->comment('');
// 创建一个名为 share_num 的bigint字段,将其放置在 column_name 字段之后,设置默认值为 0,并添加注释为 "点赞数"。
$table->bigInteger('share_num')->after('column_name')->default('0')->comment('点赞数');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('table_nam\e', function (Blueprint $table) {
$table->dropColumn('column_name');
$table->dropColumn('share_num');
});
}
}
3. 修改数据表字段
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AlterTableNameTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// 在修改字段之前,请确保你已经通过 Composer 包管理器安装了 doctrine/dbal 包。
// Doctrine DBAL 库用于确定字段的当前状态, 并创建对该字段进行指定调整所需的 SQL 查询
Schema::table('table_name', function (Blueprint $table) {
// 一定要调用change()返回,不然默认是创建
$table->string('column_name')->after('paid_at')->comment('修改')->change();
$table->bigInteger('share_num')->default(10)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('table_name', function (Blueprint $table) {
//
});
}
}
4. 删除数据表字段
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class RemoveColumnNameFromTableNameTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('table_name', function (Blueprint $table) {
//删除单个
$table->dropColumn('column_name');
//删除多个
$table->dropColumn(['big_int', 'paid_at']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('table_name', function (Blueprint $table) {
//
});
}
}
5. 特别说明
新增/修改/删除字段都是操作同一数据表,up()方法内的代码可以整合在一起,如果有需求的话。
Comments | NOTHING
该文章已经关闭评论