この記事は、「【連載】初めてのWindows用Laravel 5.7開発環境構築入門」の孫記事です。環境などの条件は、親記事をご覧ください。
この記事は、「XAMPPで動くLaravelのサンプルアプリを作成する 2018年12月版」の子記事です。
Laravelアプリがデータベースなしで設計されることは、まずないでしょう。アプリ開発は、まずデータベースの作成から始めます。
作業順は以下のようになります。
- laravelexample データベース(スキーマ)の作成
- Laravelをlaravelexampleと接続
- Laravel上にテーブル定義の作成
- Laravel上に初期データの作成
- マイグレーション(Migration、テーブルとデータの適用)を実行
ここで、テーブルや初期データをデータベースに直接作成しないのは、Laravelのアプリケーションプロジェクト内にすべてをもたせたいためです。これにより、アプリケーションのアップデートなどの際に、データベースの設計変更などもLaravelのプロジェクトの管理下に置くことができるようになります。
laravelexample データベース(スキーマ)の作成
以前の記事でインストールしたHeidiSQLを立ち上げて、Localhostに接続します。
接続したら、Localhostを右クリックし、新規作成→データベースと進みます。
データベースの名前は今回laravelexample
とします。照合(文字エンコード)はutf8mb4_unicode_ci
を選びます。これはLaravel 5.7のデフォルトエンコードです。
laravelexampleデータベースができたことを確認します。
HeidiSQLでのデータベース作成作業はこれでOKです。
Laravelをlaravelexampleと接続
データベースのテーブルや初期データは、Laravel側で作成します。その前に、Laravelのプロジェクトをデータベースに接続できる状態にする必要があります。
データベースへの接続設定は、プロジェクト内の**.envファイルにあります。Visual Studio Codeを開いて、.env**を開きます。
データベースの設定部分を以下のように書き換えます。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravelexample
DB_USERNAME=phpuser
DB_PASSWORD=php
データベースのユーザー名とパスワードは、自身で設定したものにしてください。
編集が終わったら、保存します。
次に、今回はMariaDB 10.1.37を使っているため、app\Providers\AppServiceProvider.phpの冒頭とboot()関数内に、以下を記述します。これはバージョン5.7.7より古いMySQLや、バージョン10.2.2より古いMariaDBの場合に必要で、ここで指定されています。
use Illuminate\Support\Facades\Schema;
Schema::defaultStringLength(191);
編集が終わったら、保存します。
Laravel上にテーブル定義の作成
データベーステーブルの定義は、database\migrationsフォルダ内に設置されます。
今回はユーザーのテーブルを定義するのですが、実はLaravelをインストールしたときに自動的に標準のユーザーテーブル定義ファイルが作られています。database\migrations\2017_10_12_000000_create_users_table.phpがそれです。
このup()関数内に、テーブルのブループリント(設計書)の内容を書くことで、後ほどこれに沿ったテーブルが作成されます。今回は特に触らずにそのまま使います。パスワードリセット用テーブル定義もありますが、気にせずそのままにしておきましょう。
テーブル作成のmigrateを実行する
テーブル定義をデータベースに反映するには、artisan の migrate コマンドを実行します。
Visual Studio Codeの画面でCtrl + @
でターミナルを開き、以下のコマンドを実行します。
php artisan migrate
以下のようになればOKです。
これでテーブルが作成されたはずです。HeidiSQLでLocalhostのlaravelexampleテーブルを開いてみてください。
usersがユーザーテーブルです。
他にパスワードリセット用テーブルがありますが今回は使いませんが、放置しておきましょう。migrationsテーブルは、migrationコマンドの動作制御のためのものなので放置しておきます。
Laravel上に初期データ(Seeder)の作成
テーブルは作成できましたが、初期管理ユーザーがないと困ることでしょう。こういった初期データや、テスト用データもLaravel上で定義します。この定義を、Seeder(シーダー、種まき屋)と呼びます。
まず、デフォルト状態では初期データ適用に使うFakerという機能が本番環境でオフになっているので、これをオンにします。
composer.jsonをあけて、"fzaninotto/faker": "^1.4"
の記述を require-dev
から require
に移動します。
では、Seederを作りましょう。Ctrl + @
でターミナルを開き、以下を実行します。
php artisan make:seeder UsersTableSeeder
作ったSeederは、database\seedsに格納されます。
run()関数内に、初期データを入れます。
public function run()
{
//
// Start using Faker
$faker = Faker\Factory::create('ja_JP');
// Create admin user
DB::table('users')->insert([
'name' => 'admin',
'email' => 'admin@example.com',
'password' => bcrypt('1234'),
'email_verified_at' => $faker->dateTime(),
'created_at' => $faker->dateTime(),
'updated_at' => $faker->dateTime(),
]);
}
ここで、適当に日付を作るためにFakerが使われています。
編集したら保存します。
作ったSeederは、database\seeds\DatabaseSeeder.php に登録して、存在をLaravelに教えます。
DatabaseSeeder.php にはすでにユーザーテーブルの記述がありますが、コメントアウトされています。//
を消して、有効にしましょう。
保存を忘れずに。これでSeederの準備は完了です。
マイグレーション(Migration、テーブルとデータの適用)を実行
では、もう一度Migrationを実行しましょう。今度はSeederも使います。
Ctrl + @
でターミナルを開いて、以下を実行します。
php artisan migrate --seed
Nothing to migrate. とは、テーブルは特に変更なし、何もしない。という意味です。さっきテーブルを作ったので、これで正解です。
Seeding: UserTableSeeder とは、UserTableSeederでデータを作成しているという意味です。
Database seeding completed successfully. とは、Seedingが成功した、という意味です。
では、データベースを確認してみましょう。
HeidiSQLを開けて、Localhostのlaravelexampleを見てみます。
usersテーブルのデータタブを開くと、データが入っていることがわかります。
データベースの作成はこれでOKです。