Laravelのマイグレーションファイル名は形式が決まっているようなのでメモ
Laravelでcreated_users_table.phpというマイグレーションファイルを作成して、実行したところ、エラーがでた。
$ php artisan migrate
Symfony\Component\Debug\Exception\FatalThrowableError : Class '' not found
436| public function resolve($file)
437| {
438| $class = Str::studly(implode('_', array_slice(explode('_', $file), 4)));
439|
> 440| return new $class;
441| }
442|
443| /**
444| * Get all of the migration files in a given path.
ああ、マイグレーションファイル名の形式は指定されているみたい。。
正しいファイル名は下記を参考
2019_07_05_052836_create_users_table.php
ついでに、
$class = Str::studly(implode('_', array_slice(explode('_', $file), 4)));
が何をしているかっていうと、
Str::studly
はLaravelのヘルパ関数で、文字列をアッパーキャメルケースに変換。
https://readouble.com/laravel/5.7/ja/helpers.html#method-studly-case
implodeは指定の文字列で連結
explodeは指定の文字列で分割
array_sliceは配列の一部を展開
流れを出力してみると、
$file = "2019_07_05_052836_create_users_table";
$file = explode('_', $file);
var_dump($file);
$file = array_slice($file, 4);
var_dump($file);
$file = implode('_', $file);
var_dump($file);
array(7) {
[0]=>
string(4) "2019"
[1]=>
string(2) "07"
[2]=>
string(2) "05"
[3]=>
string(6) "052836"
[4]=>
string(6) "create"
[5]=>
string(5) "users"
[6]=>
string(5) "table"
}
array(3) {
[0]=>
string(6) "create"
[1]=>
string(5) "users"
[2]=>
string(5) "table"
}
string(18) "create_users_table"
取得できたcreate_users_table
に対して、Str::studly
でアッパーキャメルケース(CreateUsersTable)に変換して、
return new $class;
インスタンスを生成しているのですなぁ。
これは、自分でも使えそうなので、覚えておく。