我需要从整数更改为外键两个字段.如何建立我的迁移这样做?
Schema::create('messages',function($table) { $table->increments('id'); $table->integer('sender'); $table->integer('recipient'); $table->string('title'); $table->longtext('body'); $table->timestamps(); $table->softDeletes(); $table->integer('regarding'); });
我将发件人更改为sender_id,收件人更改为recipient_id,并将关于_id.
解决方法
我遇到了类似的问题,需要将列类型从字符串更改为整数.我使用两个单独的迁移(每个都有一个RAW sql语句)来管理它来获取解决方案.
此外,与Postgres和MysqL一起工作,因为我们正在转移中.
第一次迁移:
/** * Run the migrations. * * @return void */ public function up() { Schema::table('plans',function(Blueprint $table) { // $table->mediumInteger('duration_change_type')->default(0)->after('duration'); }); if (Config::get('database')['default'] === 'MysqL'){ // MysqL DB::statement('update plans set duration_change_type=duration'); } else if (Config::get('database')['default'] === 'pgsql'){ // Postgresql DB::statement('update plans set duration_change_type=duration::integer'); } } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('plans',function(Blueprint $table) { // $table->dropColumn('duration_change_type'); }); }
第二次迁移:
/** * Run the migrations. * * @return void */ public function up() { Schema::table('plans',function(Blueprint $table) { // $table->dropColumn('duration'); $table->renameColumn('duration_change_type','duration'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('plans',function(Blueprint $table) { // Rollback to string $table->string('duration_change_type')->default(0)->after('duration'); }); if (Config::get('database')['default'] === 'MysqL'){ // MysqL DB::statement('update plans set duration_change_type=duration'); } else if (Config::get('database')['default'] === 'pgsql'){ // Postgresql DB::statement('update plans set duration_change_type=duration::text'); } }
现在思考,可以简化为一次迁移.