laravel5.5 を使ってマイグレーションでデータベースのテーブルを作成し、シーディングで作成したテーブルを初期化します。使用した各ソフトのバーションを次に示します。

  • Windows 7 Professional SP1 32-bit
  • Xampp Version: 7.2.4
     PHP 7.2.4
  • Laravel 5.5.10
  • Composer 1.6.3

laravel5.5のインストール

Laravel 5.6のインストール」に従ってlaravel5.5のインストールをインストールします。ただし、Composerを使用したLaravel 5.5のインストールでは、次のコマンドを実行し、プロジェクトを「laravel55」とします。

> composer create-project laravel/laravel --prefer-dist laravel 5.5

データベース名は「laravel」とし、マイグレーションの方法を確認するため、マイグレーションによるデータベーステーブルの作成を行わず、フォルダ「laravel55/database/migrations」内のファイルは削除しておきます。

ブラウザ上からURL「http://localhost/laravel55/public/」を入力してLaravelを起動すると、次の画面が表示されます。

マイグレーションによるデータベーステーブルの作成

マイグレーションは、データベースのテーブル作成や編集などを管理する方法で、複数のデータベースに同じ記述で対応でき、ロールバックもコマンド1つで可能となります。

マイグレーションの作成

次のコマンドを実行すると、タイムスタンプのついた「create_applicant_info_table」が作成され、テーブル名が「applicant_info」となります。ファイル名は「create_xxxx_table」とし、xxxxをテーブル名とします。

>php artisan make:migration create_applicant_info_table  --create=applicant_info
Created Migration: 2019_04_29_212647_create_applicant_info_table

テーブル構造の作成

「database/migrations」に作成された「2019_04_29_212647_create_applicant_info_table.php」のupメソッドに次のデータ項目を追加します

$table->string('Name',70);
$table->string('Address',120);
$table->string('Telephone',20);
$table->string('FAX',20);
$table->string('E-MAIL',70);

マイグレーションの実行(テーブルの作成)

作成したマイグレーションを次のコマンドで実行します。

> php artisan migrate

なお、migrationsテーブルにより管理されているため、何回やっても「Nothing to migrate.」となり、データベーステーブルは更新されません。データベース「laravel」に作成されたmigrationsテーブルの内容を次に示します。

シーディングによるデータベーステーブルの初期化

Laravelには、「シーダクラス(初期値設定クラス)」があり、データベースへ初期データを簡単に投入できます。例えば、マイグレーションでデータベースを構築し、シーディングで初期データを投入するようにしておけば、いつでもデータベースの再構築と初期データの投入までを行えます。

シーダの作成

初期化するデータを記述するSeedファイルを次のコマンドで生成します。シーダクラス名は「xxxxSeeder」とし、xxxxをテーブル名とします。ここでは「applicant_infoSeeder」としました。

> php arnotisan make:seeder applicant_infoSeeder

シーダークラスの定義

作成した「database/seeds/applicant_infoSeeder.php」のrun()メソッドに、初期化するデータを定義するため、次のように編集します。

DB::table('applicant_info')->insert([
  [
    'Name' => 'ブック1',
    'Address' => '著者',
    'Telephone' => 'Telephone',
    'FAX' => 'FAX',
    'E-MAIL' => 'E-MAIL',
  ],
  [
    'Name' => 'ブック2',
    'Address' => '著者',
    'Telephone' => 'Telephone',
    'FAX' => 'FAX',
    'E-MAIL' => 'E-MAIL',
  ],
  [
    'Name' => 'ブック3',
    'Address' => '著者',
    'Telephone' => 'Telephone',
    'FAX' => 'FAX',
    'E-MAIL' => 'E-MAIL',
  ],
]);

シーダクラスをコールする設定

次にこのシーダクラスをシーディング実行時にコールするため、フォルダ「seeds」にあるもう一つのファイル「DatabaseSeeder.php」に次の記述を追加します。

$this->call(applicant_infoSeeder::class);

シーダの実行

次のコマンドでシーディングを実行します。

> php artisan db:seed
Seeding: applicant_infoSeeder

データベース「laravel」に作成された初期化されたapplicant_infoテーブルの内容を次に示します。

usersテーブルのマイグレーションを実行すると Syntax error

今回の環境では、次のSyntax error が発生しました。

「 SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes」
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))

調べてみると、

  • Laravel5.4以上
  • MySQL5.7.7未満

で発生するようで、原因は

  • Laravel5.4から標準charasetがutf8mb4に変わった
  • MySQL5.7.7未満ではユニーク制約を付けたカラムは最大767bytes

で、解決方法として、charasetをutf8mb4にして、MySQLのバージョンを最新にする必要があります。