laravel 数据库 迁移
简介
迁移就像数据库的版本控制,允许团队简单轻松的编辑并共享应用的数据库表结构,迁移通常和Laravel的schema构建器结对从而可以很容易地构建应用的数据库表结构。如果你曾经告知小组成员需要手动添加列到本地数据库结构,那么这正是数据库迁移所致力于解决的问题。
Laravel 的Schema门面提供了与数据库系统无关的创建和操纵表的支持,在 Laravel 所支持的所有数据库系统中提供一致的、优雅的、平滑的API。
生成迁移
使用 Artisan 命令make:migration来创建一个新的迁移:
php artisan make:migration create_users_table
新的迁移位于database/migrations目录下,每个迁移文件名都包含时间戳从而允许 Laravel 判断其顺序。
–table和–create选项可以用于指定表名以及该迁移是否要创建一个新的数据表。这些选项只需要简单放在上述迁移命令后面并指定表名:
php artisan make:migration create_users_table --create=users php artisan make:migration add_votes_to_users_table --table=users
如果你想要指定生成迁移的自定义输出路径,在执行make:migration命令时可以使用–path选项,提供的路径应该是相对于应用根目录的。
3、迁移结构
迁移类包含了两个方法:up和down。up方法用于新增表,列或者索引到数据库,而down方法就是up方法的反操作,和up里的操作相反。
在这两个方法中你都要用到 Laravel 的schema构建器来创建和修改表,要了解更多Schema构建器提供的方法,参考其文档。下面让我们先看看创建flights表的简单示例:
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateFlightsTable extends Migration{ /** * 运行迁移 * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * 撤销迁移 * * @return void */ public function down() { Schema::drop('flights'); } }
创建列
要更新一个已存在的表,使用Schema门面上的table方法,和create方法一样,table方法接收两个参数:表名和获取用于添加列到表的Blueprint实例的闭包:
Schema::table('users', function ($table) { $table->string('email'); });
可用的列类型
当然,schema构建器包含一系列你可以用来构建表的列类型:
$table->bigIncrements('id'); 自增ID,类型为bigint $table->bigInteger('votes'); 等同于数据库中的BIGINT类型 $table->binary('data'); 等同于数据库中的BLOB类型 $table->boolean('confirmed'); 等同于数据库中的BOOLEAN类型 $table->char('name', 4); 等同于数据库中的CHAR类型 $table->date('created_at'); 等同于数据库中的DATE类型 $table->dateTime('created_at'); 等同于数据库中的DATETIME类型 $table->dateTimeTz('created_at'); 等同于数据库中的DATETIME类型(带时区) $table->decimal('amount', 5, 2); 等同于数据库中的DECIMAL类型,带一个精度和范围 $table->double('column', 15, 8); 等同于数据库中的DOUBLE类型,带精度, 总共15位数字,小数点后8位. $table->enum('choices', ['foo', 'bar']); 等同于数据库中的 ENUM类型 $table->float('amount'); 等同于数据库中的 FLOAT 类型 $table->increments('id'); 数据库主键自增ID $table->integer('votes'); 等同于数据库中的 INTEGER 类型 $table->ipAddress('visitor'); 等同于数据库中的 IP 地址 $table->json('options'); 等同于数据库中的 JSON 类型 $table->jsonb('options'); 等同于数据库中的 JSONB 类型 $table->longText('description'); 等同于数据库中的 LONGTEXT 类型 $table->macAddress('device'); 等同于数据库中的 MAC 地址 $table->mediumIncrements('id'); 自增ID,类型为无符号的mediumint $table->mediumInteger('numbers'); 等同于数据库中的 MEDIUMINT类型 $table->mediumText('description'); 等同于数据库中的 MEDIUMTEXT类型 $table->morphs('taggable'); 添加一个 INTEGER类型的 taggable_id 列和一个 STRING类型的 taggable_type列 $table->nullableTimestamps(); 和 timestamps()一样但允许 NULL值. $table->rememberToken(); 添加一个 remember_token 列: VARCHAR(100) NULL. $table->smallIncrements('id'); 自增ID,类型为无符号的smallint $table->smallInteger('votes'); 等同于数据库中的 SMALLINT 类型 $table->softDeletes(); 新增一个 deleted_at 列 用于软删除. $table->string('email'); 等同于数据库中的 VARCHAR 列 . $table->string('name', 100); 等同于数据库中的 VARCHAR,带一个长度 $table->text('description'); 等同于数据库中的 TEXT 类型 $table->time('sunrise'); 等同于数据库中的 TIME类型 $table->timeTz('sunrise'); 等同于数据库中的 TIME 类型(带时区) $table->tinyInteger('numbers'); 等同于数据库中的 TINYINT 类型 $table->timestamp('added_on'); 等同于数据库中的 TIMESTAMP 类型 $table->timestampTz('added_on'); 等同于数据库中的 TIMESTAMP 类型(带时区) $table->timestamps(); 添加 created_at 和 updated_at列 $table->timestampsTz(); 添加 created_at 和 updated_at列(带时区) $table->unsignedBigInteger('votes'); 等同于数据库中无符号的 BIGINT 类型 $table->unsignedInteger('votes'); 等同于数据库中无符号的 INT 类型 $table->unsignedMediumInteger('votes'); 等同于数据库中无符号的 MEDIUMINT 类型 $table->unsignedSmallInteger('votes'); 等同于数据库中无符号的 SMALLINT 类型 $table->unsignedTinyInteger('votes'); 等同于数据库中无符号的 TINYINT 类型 $table->uuid('id'); 等同于数据库的UUID
运行迁移
要运行应用中所有未执行的迁移,可以使用 Artisan 命令提供的migrate方法:
php artisan migrate
注:如果你正在使用Homestead虚拟机,需要在虚拟机中运行上面这条命令。
- Laravel4.1数据库 数据库迁移案例(四)
- Laravel 的数据库迁移
- Laravel 5.2 数据库迁移和数据填充
- laravel框架数据库迁移
- Laravel4.1数据库 数据库迁移(三)
- Laravel中如何做数据库迁移
- Laravel实现数据库迁移与支持中文的填充
- laravel 数据库迁移表结构构建器
- Laravel- 数据库迁移
- Laravel框架下,wamp中数据库的迁移,踩过的坑
- laravel 5.3 model的操作以及数据库迁移
- laravel 数据库迁移Migrations(命令行)
- Laravel 5框架学习之数据库迁移(Migrations)
- laravel中数据库迁移
- 在laravel中执行数据库迁移报在执行数据库迁移时提示:php artisan migrate SQLSTATE[42000]: Syntax error or access violation
- laravel5.4数据库迁移
- php框架laravel学习 二 (数据库建立迁移与建模)
- laravel中使用mgirations创建和迁移数据库
- laravel5.5 迁移数据库 出错(三)
- Laravel 5框架学习之数据库迁移(Migrations)