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;

インスタンスを生成しているのですなぁ。

これは、自分でも使えそうなので、覚えておく。