当前位置: 首页 > 后端技术 > PHP

Laravel数据库迁移

时间:2023-03-29 18:10:00 PHP

1:创建迁移在laravel中使用make:migration命令创建迁移phpartisanmake:migrationcreate_user_table执行以上命令后,会在database/migrations目录下生成对应的迁移文件,每一个migration两个文件名都包含一个时间戳,让Laravel确认迁移的顺序。二:迁移结构一个迁移类包含两个方法:up和down。up方法用于添加数据库的数据表、字段或索引,down方法应该执行与up方法相反的操作。1:up方法publicfunctionup(){Schema::create('user',function(Blueprint$table){$table->bigIncrements('id');$table->string('name');$table->string('email')->unique();$table->timestamp('email_verified_at')->nullable();$table->string('password');$table->rememberToken();$table->timestamps();});}2:downmethodpublicfunctiondown(){Schema::dropIfExists('user');}3:运行迁移phpartisanmigrate大多数迁移操作都是破坏性的,这意味着数据可能迷路了。为了防止有人在生产数据中运行这些命令,在执行这些命令之前会提示您进行确认。如果想在没有提示的情况下强制运行迁移命令,使用--force参数phpartisanmigrate--force四:迁移回滚phpartisanmigrate:rollback通过在回滚命令中加入step参数,可以回滚指定的amountMigratephpartisanmigrate:rollback--step=5migrate:reset命令会回滚你应用的所有迁移:phpartisanmigrate:reset五:回滚后迁移migrate:refresh命令会回滚你所有的迁移执行migrate命令.这个命令可以高效的重建你的整个数据库:phpartisanmigrate:refresh//刷新数据库并进行数据库填充phpartisanmigrate:refresh--seed六:可用的字段类型在laravel的数据库迁移中,支持的字段类型有:命令描述$表->bigIncrements('id');递增ID(主键),相当于“UNSIGNEDBIGINTEGER”$table->bigInteger('votes');相当于BIGINT$table->binary('data');相当于BLOB$table->boolean('confirmed');等同于BOOLEAN$table->char('name',100);相当于CHAR$table->date('created_at');相当于DATE$table->dateTime('created_at');相当于DATETIME$table->dateTimeTz('created_at');相当于DATETIME$table->decimal('amount',8,2);相当于时区精度和基数DECIMAL$table->double('amount',8,2);相当于精度和基础DOUBLE$table->enum('level',['easy','hard']);相当于ENUM$table->float('amount',8,2);相当于FLOAT$table->geometry('positions');相当于GEOMETRY$table->geometryCollection('positions');相当于GEOMETRYCOLLECTION$table->increments('id');增量ID(主键),相当于"UNSIGNEDINTEGER"$table->integer('votes');相当于INTEGER$table->ipAddress('visitor');相当于IP地址$table->json('选项');相当于JSON$table->jsonb('options');相当于JSONB$table->lineString('positions');相当于LINESTRING$table->longText('description');相当于LONGTEXT$table->macAddress('device');相当于MAC地址$table->mediumIncrements('id');增量ID(主键),相当于"UNSIGNEDMEDIUMINTEGER"$table->mediumInteger('votes');相当于MEDIUMINT$table->mediumText('description');等同于MEDIUMTEXT$table->morphs('taggable');相当于增加taggable_id和stringtaggable_type$table->uuidMorphs('taggable');相当于添加taggable_id和stringtaggable_typeUUID列$table->multiLineString('位置');相当于MULTILINESTRING$table->multiPoint('positions');相当于MULTIPOINT$table->multiPolygon('positions');相当于MULTIPOLYGON$table->nullableMorphs('taggable');相当于morphs()字段的可空版本$table->nullableUuidMorphs('taggable');相当于uuidMorphs()字段的可空版本$table->nullableTimestamps();相当于timestamps()字段的可空版本$table->point('position');相当于POINT$table->polygon('positions');相当于POLYGON$table->rememberToken();相当于可空版本Field中VARCHAR(100)的remember_token$table->set('flavors',['strawberry','vanilla']);相当于SET$table->smallIncrements('id');递增ID(主键),相当于“UNSIGNEDSMALLINT”$table->smallInteger('votes');相当于SMALLINT$table->softDeletes();相当于为软删除添加一个可为空的deleted_at字段$table->softDeletesTz();相当于为软删除添加一个可空的带时区的deleted_at字段$table->string('name',100);等同于VARCHAR$table->text('description');相当于TEXT$table->time('sunrise');等效于TIME$table->timeTz('sunrise');相当于TIME$table->timestamp('added_on');相当于TIMESTAMP$table->timestampTz('added_on');相当于带时区的TIMESTAMP$table->timestamps();相当于空的created_at和updated_atTIMESTAMP$table->timestampsTz();相当于Created_at和updated_atTIMESTAMP$table->tinyIncrements('id'),可以为空,有时区;相当于自动递增UNSIGNEDTINYINT$table->tinyInteger('votes');相当于TINYINT$table->unsignedBigInteger('votes');相当于UnsignedBIGINT$table->unsignedDecimal('amount',8,2);相当于UNSIGNEDDECIMAL$table->unsignedInteger('votes');相当于UnsignedINT$table->unsignedMediumInteger('votes');等同于UnsignedMEDIUMINT$table->unsignedSmallInteger('votes');相当于UnsignedSMALLINT$table->unsignedTinyInteger('votes');相当于UnsignedTINYINT$table->uuid('id');相当于UUID$table->year('birth_year');相当于YEAR七:字段修改在laravel的数据库迁移中,支持的字段修饰符有:commanddescription->after('column')this字段放在其他字段“之后”(MySQL)->autoIncrement()设置INTEGER类型fieldasanauto-incrementingprimarykey->charset('utf8')指定字符集(MySQL)->collat??ion('utf8_unicode_ci')指定列的排序规则(MySQL/SQLServerr)->comment('mycomment')给字段添加注释(MySQL)->default($value)为字段指定“默认”值->first()把这个字段放在“first”的数据表(MySQL)->nullable($value=true)该字段允许写入NULL值(默认)->storedAs($expression)创建存储生成字段(MySQL)->unsigned()设置字段INTEGER类型到UNSIGNED(MySQL)->useCurrent()设置一个TIMESTAMP类型的字段使用CURRENT_TIMESTAMP作为默认值->virtualAs($expression)创建一个虚拟生成字段(MySQL)->generatedAs($expression)使用指定序列生成标识列(PostgreSQL)->always()定义标识列输入前的序列值(PostgreSQL)->primary('id')添加主键->primary(['id','parent_id'])添加复合键->unique('email')添加唯一索引->index('state')添加普通索引->spatialIndex('location')添加空间索引(SQLite没有支持)->renameIndex('from','to')重命名索引->dropPrimary('users_id_primary')删除主键->dropUnique('users_email_unique');删除唯一索引->dropIndex('geo_state_index');删除基础索引->dropSpatialIndex('geo_location_spatialindex');删除空间索引(不支持SQLite)示例:Schema::table('users',function(Blueprint$table){$table->string('email')->nullable();});八:修改字段变化方法该方法可以将现有字段类型修改为新的类型或修改属性,例如:Schema::table('users',function(Blueprint$table){$table->string('name',50)->change();});renameColumn方法用于根据doctrine/dbal扩展重命名字段,例如:Schema::table('users',function(Blueprint$table){$table->renameColumn('from','to');});九:删除字段dropColumn方法删除字段,例如:Schema::table('users',function(Blueprint$table){$table->dropColumn(['votes','avatar','location']);//删除投票、头像、位置字段});十:索引长度&Mysql/MariaDBLaravel默认使用utf8mb4编码,支持在数据库中存储emojis如果你在低于5.7.7的MySQL版本或者如果你想在低于10.2.2的MariaDB版本上创建索引,那么您需要手动配置数据库迁移的默认字符串长度。也就是说,调用app/Providers/AppServiceProvider中的Schema::defaultStringLength方法来配置它useIlluminate\Support\Facades\Schema;/***Bootstrapanyapplicationservices。**@returnvoid*/publicfunctionboot(){Schema::defaultStringLength(191);}十一:外键约束Laravel还支持创建外键约束以在数据库层强制引用完整性。例如,让我们在引用用户表的id字段的posts表上定义一个user_id字段:Schema::table('posts',function(Blueprint$table){$table->unsignedBigInteger('user_id');$table->foreign('user_id')->references('id')->on('users');});在迁移文件中使用以下方法启用或禁用外键约束Schema::enableForeignKeyConstraints();Schema::disableForeignKeyConstraints();

最新推荐
猜你喜欢