LoginSignup
3
3

More than 5 years have passed since last update.

Laravelアプリ用のデータベースの作り方

Last updated at Posted at 2018-12-12

この記事は、「【連載】初めてのWindows用Laravel 5.7開発環境構築入門」の孫記事です。環境などの条件は、親記事をご覧ください。
この記事は、「XAMPPで動くLaravelのサンプルアプリを作成する 2018年12月版」の子記事です。


 Laravelアプリがデータベースなしで設計されることは、まずないでしょう。アプリ開発は、まずデータベースの作成から始めます。

作業順は以下のようになります。

  • laravelexample データベース(スキーマ)の作成
  • Laravelをlaravelexampleと接続
  • Laravel上にテーブル定義の作成
  • Laravel上に初期データの作成
  • マイグレーション(Migration、テーブルとデータの適用)を実行

 ここで、テーブルや初期データをデータベースに直接作成しないのは、Laravelのアプリケーションプロジェクト内にすべてをもたせたいためです。これにより、アプリケーションのアップデートなどの際に、データベースの設計変更などもLaravelのプロジェクトの管理下に置くことができるようになります。

laravelexample データベース(スキーマ)の作成

以前の記事でインストールしたHeidiSQLを立ち上げて、Localhostに接続します。

image.png

接続したら、Localhostを右クリックし、新規作成→データベースと進みます。
image.png

データベースの名前は今回laravelexampleとします。照合(文字エンコード)はutf8mb4_unicode_ciを選びます。これはLaravel 5.7のデフォルトエンコードです。
image.png

laravelexampleデータベースができたことを確認します。
image.png

HeidiSQLでのデータベース作成作業はこれでOKです。

Laravelをlaravelexampleと接続

 データベースのテーブルや初期データは、Laravel側で作成します。その前に、Laravelのプロジェクトをデータベースに接続できる状態にする必要があります。

 データベースへの接続設定は、プロジェクト内の.envファイルにあります。Visual Studio Codeを開いて、.envを開きます。
image.png

データベースの設定部分を以下のように書き換えます。

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);

image.png

編集が終わったら、保存します。

Laravel上にテーブル定義の作成

 データベーステーブルの定義は、database\migrationsフォルダ内に設置されます。

 今回はユーザーのテーブルを定義するのですが、実はLaravelをインストールしたときに自動的に標準のユーザーテーブル定義ファイルが作られています。database\migrations\2017_10_12_000000_create_users_table.phpがそれです。
image.png

 このup()関数内に、テーブルのブループリント(設計書)の内容を書くことで、後ほどこれに沿ったテーブルが作成されます。今回は特に触らずにそのまま使います。パスワードリセット用テーブル定義もありますが、気にせずそのままにしておきましょう。

テーブル作成のmigrateを実行する

 テーブル定義をデータベースに反映するには、artisan の migrate コマンドを実行します。

 Visual Studio Codeの画面でCtrl + @でターミナルを開き、以下のコマンドを実行します。

php artisan migrate

以下のようになればOKです。

image.png

これでテーブルが作成されたはずです。HeidiSQLでLocalhostのlaravelexampleテーブルを開いてみてください。

image.png

 usersがユーザーテーブルです。

 他にパスワードリセット用テーブルがありますが今回は使いませんが、放置しておきましょう。migrationsテーブルは、migrationコマンドの動作制御のためのものなので放置しておきます。

Laravel上に初期データ(Seeder)の作成

 テーブルは作成できましたが、初期管理ユーザーがないと困ることでしょう。こういった初期データや、テスト用データもLaravel上で定義します。この定義を、Seeder(シーダー、種まき屋)と呼びます。

 まず、デフォルト状態では初期データ適用に使うFakerという機能が本番環境でオフになっているので、これをオンにします。

 composer.jsonをあけて、"fzaninotto/faker": "^1.4" の記述を require-dev から require に移動します。

image.png

こうなります。カンマに気をつけてください。
image.png

では、Seederを作りましょう。Ctrl + @ でターミナルを開き、以下を実行します。

php artisan make:seeder UsersTableSeeder

image.png

作ったSeederは、database\seedsに格納されます。
image.png

run()関数内に、初期データを入れます。

UsersTableSeeder.php
    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に教えます。

image.png

DatabaseSeeder.php にはすでにユーザーテーブルの記述がありますが、コメントアウトされています。// を消して、有効にしましょう。

image.png

保存を忘れずに。これでSeederの準備は完了です。

マイグレーション(Migration、テーブルとデータの適用)を実行

では、もう一度Migrationを実行しましょう。今度はSeederも使います。
Ctrl + @でターミナルを開いて、以下を実行します。

php artisan migrate --seed

image.png

Nothing to migrate. とは、テーブルは特に変更なし、何もしない。という意味です。さっきテーブルを作ったので、これで正解です。

Seeding: UserTableSeeder とは、UserTableSeederでデータを作成しているという意味です。

Database seeding completed successfully. とは、Seedingが成功した、という意味です。

では、データベースを確認してみましょう。

HeidiSQLを開けて、Localhostのlaravelexampleを見てみます。
usersテーブルのデータタブを開くと、データが入っていることがわかります。

image.png

データベースの作成はこれでOKです。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3