はじめに
プログラミング初心者ひいてはLaravel初心者なので、マイグレーションファイルを作成するときには、メモしてある入門サイトで見たコマンドをコピーして変更箇所をちょこっと編集する、みたいな面倒かつ自分的には格好悪い方法を用いていました。
ただ、「やっぱりコマンド打ちたい」「格好付けたい」と思ったので、migrationコマンドを理解するために色々実験してみました。
これをきっかけに、コマンドの勉強も少しづつしていけたらなと思っています。
いつもコピーしているコマンド
以下の「cats」の部分(テーブル名)を変更して使い倒していました。
php artisan make:migration create_cats_table --create=cats
前提
基本的な部分の理解すら危ういので、覚え書きしておきます。
- migrationコマンドは、マイグレーションファイルを作成するために打つコマンド
- マイグレーションファイルは、テーブルの作成・削除・追加をするためのファイル
- Schema::createメソッドは、新規にテーブルを作成する(以下より、createメソッド)
- Schema::tableメソッドは、既存のテーブルにカラムを追加する(以下より、tableメソッド)
テーブルの削除をするdropifExcistsメソッドもありますが、今回は横にポイしておきます。
createプレフィックスとtableサフィックス
自分がコピーしてるコードにあるヤツですね。
create_と_tableっていう文字。
ちなみに、プレフィックスとサフィックスの意味を調べちゃいました。
そんなレベルです。
実験①
php artisan make:migration create_xxxx_yyyy
- create_のプレフィックスを付けると、自動的にそれ以降がテーブル名とみなされる
- この場合CreateXxxxYyyyクラスが作成され、xxxx_yyyyテーブルを作成するためのファイルが作成される
- その際、createメソッドが自動的に追加される
classCreateXxxxYyyyextendsMigration{/**
* Run the migrations.
*
* @return void
*/publicfunctionup(){Schema::create('xxxx_yyyy',function(Blueprint$table){$table->bigIncrements('id');$table->timestamps();});}/**
* Reverse the migrations.
*
* @return void
*/publicfunctiondown(){Schema::dropIfExists('xxxx_yyyy');}}
実験②
php artisan make:migration create_xxxx_yyyy_table
- create_xxxx_yyyy_tableのように、tableサフィックスを付けると、createとtableに挟まれた文字がテーブル名とみなされる(tableは無視される)
- この場合CreateXxxxYyyyTableクラスが作成され、xxxx_yyyyテーブルを作成するためのファイルが作成される
- その際、createメソッドが自動的に追加される
classCreateXxxxYyyyTableextendsMigration{/**
* Run the migrations.
*
* @return void
*/publicfunctionup(){Schema::create('xxxx_yyyy',function(Blueprint$table){$table->bigIncrements('id');$table->timestamps();});}/**
* Reverse the migrations.
*
* @return void
*/publicfunctiondown(){Schema::dropIfExists('xxxx_yyyy');}}
つまり、create_以降は分かりやすければ基本何でも良いということだと思います。
to
「なんじゃこれ」って感じでしたが、普段あまり使っていないだけで、チュートリアルとかに出てた気が・・・。
実験①
php artisan make:migration add_new_column_to_tests
- この場合、testsテーブルにnew_columnというカラムを追加するためのファイルが作成される
- その際、Shema::tableメソッドが自動的に追加される
- なお、new_columnを追加するという処理は自分で記述しないといけない
classAddNewColumnToTestsextendsMigration{/**
* Run the migrations.
*
* @return void
*/publicfunctionup(){Schema::table('tests',function(Blueprint$table){//});}/**
* Reverse the migrations.
*
* @return void
*/publicfunctiondown(){Schema::table('tests',function(Blueprint$table){//});}}
実験②
php artisan make:migration add_new_column_too_tests
- toがtableメソッド作成と繋がっているぽいので、tooだとアウト(tableメソッドが追加されていないファイルが作成された)
classAddNewColumnTooTestsextendsMigration{/**
* Run the migrations.
*
* @return void
*/publicfunctionup(){//}/**
* Reverse the migrations.
*
* @return void
*/publicfunctiondown(){//}}
実験③
php artisan make:migration edd_new_column_to_tests
- addも必要かと思っていたが、eddでもいけた
実験④
php artisan make:migration new_column_to_tests
- 最早つけなくても大丈夫(addはファイル名をわかりやすくするためかな)
実験⑤
php artisan make:migration to_tests
- 流石にアウト
実験⑥
php artisan make:migration new_column_to
- これももちろんアウト
つまり、xxx_to_yyyというように、基本的にtoとその前後に何かしら分かりやすい文字が指定されていれば問題ないということだと思います。
createオプションとtableオプション
これもコピーしてたものについていたヤツですね。
実験①
php artisan make:migration test--create=stset
- Testというクラス内にcreateメソッドを作成し、--create以降に指定された名前のテーブル(この場合はstset)を作成できるコードが記述される
classTestextendsMigration{/**
* Run the migrations.
*
* @return void
*/publicfunctionup(){Schema::create(’stset’,function(Blueprint$table){$table->bigIncrements('id');$table->timestamps();});}/**
* Reverse the migrations.
*
* @return void
*/publicfunctiondown(){Schema::dropIfExists('stset');}}
実験②
php artisan make:migration test--table=stset
- tableメソッドを作成し、--table以降に指定された名前のテーブルにカラムを追加できるコードが記述される
classTestextendsMigration{/**
* Run the migrations.
*
* @return void
*/publicfunctionup(){Schema::table('stset',function(Blueprint$table){//});}/**
* Reverse the migrations.
*
* @return void
*/publicfunctiondown(){Schema::table('stset',function(Blueprint$table){//});}}
つまり、createメソッド(もしくはtableメソッド)の作成とテーブル名の指定をコンパクトにでき、ファイル名ないしはクラス名と切り分けることができるということだと思います。
まとめ
create_xxx_yyyと—createオプション、xxx_to_yyyと—tableオプションを同時に指定する必要はなかったです。
いつもコピーしているコマンドを変えるとしたら、
php artisan make:migration create_cats_table
もしくは(あえてcreateをファイル名・クラス名に入れたい場合は別として)
php artisan make:migration cats_table --create=cats
で良かったのですね。
蛇足
新規作成・削除と追加を同時にすることはないとは思いますが、気になったのでやってみました。
実験①
php artisan make:migration test--create=achira --table=kochira
- createメソッドを作成し、なおかつテーブル名がkochira
- --createに指定したachiraは無視される
classTestextendsMigration{/**
* Run the migrations.
*
* @return void
*/publicfunctionup(){Schema::create('kochira',function(Blueprint$table){$table->bigIncrements('id');$table->timestamps();});}/**
* Reverse the migrations.
*
* @return void
*/publicfunctiondown(){Schema::dropIfExists('kochira');}}
実験②
php artisan make:migration test2 --table=kochira --create=achira
- createメソッドを作成し、なおかつテーブル名がkochira
- 順番を変更しても、実験①と同じ結果
実験③
php artisan make:migration test2 --table--create
- --create, --tableどちらも名前を指定しないと、アウト
実験④
php artisan make:migration test3 --table--create=tests
or
php artisan make:migration test3 --create--table=tests
- createメソッドを作成し、なおかつテーブル名はtests(--tableは無視)
- tableメソッドを作成し、なおかつテーブル名はtests(--createは無視)
つまり、createオプションとtableオプションに対して同時にテーブル名が指定された時、createはメソッド指定、tableはテーブル名指定となるということだと思います。
おわりに
今後は(合っていると信じたい)上の理解を踏まえて、手打ちで実行してみます。
また、まだ若干の抵抗はありますが、コマンドの勉強もしていきたいと思います。
もし間違っている部分や補足したい部分などがありましたら、コメント頂けると嬉しいです。
ご覧いただき、ありがとうございました。