🗂️
【Laravel】PrimaryKeyを外してカラムをnullableにするマイグレーションの書き方
概要
PrimaryKey
に指定していたカラムがNULL
を許容するためDDL
を更新しようとすると以下のエラーが発生したので解決方法をまとめる
Syntax error or access violation: 1171 All parts of a PRIMARY KEY must be NOT NULL;
ChangeProfileIdToTabletStaffMaps.php
class ChangeProfileIdToTabletStaffMaps extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('tablet_staff_maps', function (Blueprint $table) {
$table->dropPrimary('tablet_staff_maps_tablet_uuid_staff_id_profile_id_primary');
$table->dropUnique('tablet_staff_maps_tablet_uuid_staff_id_profile_id_unique');
$table->primary(['tablet_uuid', 'staff_id']);
$table->unique(['tablet_uuid', 'staff_id']);
$table->unsignedBigInteger('profile_id')->comment('プロフィールID')->nullable()->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('tablet_staff_maps', function (Blueprint $table) {
$table->dropPrimary('tablet_staff_maps_tablet_uuid_staff_id_primary');
$table->dropUnique('tablet_staff_maps_tablet_uuid_staff_id_unique');
$table->primary(['tablet_uuid', 'staff_id', 'profile_id']);
$table->unique(['tablet_uuid', 'staff_id', 'profile_id']);
$table->unsignedBigInteger('profile_id')->comment('プロフィールID')->change();
});
}
}
環境
- PHP 7.4.25
- Laravel Framework 6.20.44
解決方法
こちらの記事を参考にしました。
記事の題名通りなのですが処理を分割して記述することが必要になります
ChangeProfileIdToTabletStaffMaps.php
class ChangeProfileIdToTabletStaffMaps extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('tablet_staff_maps', function (Blueprint $table) {
$table->dropPrimary('tablet_staff_maps_tablet_uuid_staff_id_profile_id_primary');
});
Schema::table('tablet_staff_maps', function (Blueprint $table) {
$table->dropUnique('tablet_staff_maps_tablet_uuid_staff_id_profile_id_unique');
});
Schema::table('tablet_staff_maps', function (Blueprint $table) {
$table->primary(['tablet_uuid', 'staff_id']);
$table->unique(['tablet_uuid', 'staff_id']);
$table->unsignedBigInteger('profile_id')->comment('プロフィールID')->nullable()->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('tablet_staff_maps', function (Blueprint $table) {
$table->dropPrimary('tablet_staff_maps_tablet_uuid_staff_id_primary');
});
Schema::table('tablet_staff_maps', function (Blueprint $table) {
$table->dropUnique('tablet_staff_maps_tablet_uuid_staff_id_unique');
});
Schema::table('tablet_staff_maps', function (Blueprint $table) {
$table->primary(['tablet_uuid', 'staff_id', 'profile_id']);
$table->unique(['tablet_uuid', 'staff_id', 'profile_id']);
$table->unsignedBigInteger('profile_id')->comment('プロフィールID')->change();
});
}
}
Discussion