暇なときに予定を探せるアプリyoteiPickerをリリースしました。
Laravelのマイグレーションで既存カラムの順番を変更する方法を解説します。
laravelのバージョンは6系
mysqlは5.7系。
phpは7.4系です。
>>フリーランスも対象!エンジニア転職におすすめなサイト5選
マイグレーションをすでに作成して、テーブルもできたのにカラムの順番を変更したい時ってあると思います。
booksテーブル
book_id
book_name
category_id
これを、以下のようにしたい。
booksテーブル
book_id
category_id
book_name
真っ先に考えられるのはchangeマイグレーションを作成して、afterで対応すればいいのでは?と思うかもしれませんが、うまくいかないんですよね。
そんな時は、以下の方法を試してみましょう。
まずは、カラムの順番を変更するマイグレーションファイルの作成
php artisan make:migration change_book_name_to_books_table --table=books
以下のようにマイグレーションファイルを編集。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class ChangeBookNameToBooksTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('books', function (Blueprint $table) {
DB::statement("ALTER TABLE books MODIFY COLUMN book_name varchar(255) NOT NULL AFTER category_id");
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('books', function (Blueprint $table) {
DB::statement("ALTER TABLE books MODIFY COLUMN book_name varchar(255) NOT NULL AFTER book_id");
});
}
}
マイグレーションを実行。
php artisan migrate
DB::statement("ALTER TABLE books MODIFY COLUMN book_name varchar(255) NOT NULL AFTER category_id");
ポイントは上記ですが、book_nameの後のvarchar(255) NOT NULL
を忘れずに記載してください。
今回はbook_nameの型は文字列(string)でnullを許容しないカラムだったので、このように書きました。
※マイグレーションファイルではstringだが、mySQLではvarcharであることに注意。
数値型の場合は、intとかになります。
他にも記事書いているので、ぜひプロフィールからご参照ください。
・マイグレーション
・クエリビルダなど
書いています。
暇なときに予定を探せるアプリyoteiPickerをリリースしました。
>>Laravelのマイグレーションが怖くない【作成・カラムの追加・削除】
>>【Laravelクエリビルダ】複数のカラムをgroupByでグループ化させる