見出し画像

データーベースの利用 #Laravel頻出パターン

# はじめに

Laravelを使ったプログラミングは小さな積み重ねが重要です。Laravel頻出パターンとして独立した形でよくあるパターンをまとめました。

本稿ではデーターベースの利用に関する基礎的な知識をまとめます。

サンプルプロジェクトの作成で必須となりますので、用語なども覚えましょう。

用語
・マイグレーション
・Seeder
・.env設定ファイル
・テーブル、カラム


# 課題

本稿の課題はこちらです。

・.envファイルを編集してデーターベースの接続情報を設定する
・マイグレーション機能を使ってテーブルを作成すること
・Seederを使ってダミーデータを作成すること


# .envファイルの編集

Laravelからデーターベースを利用するには.env設定ファイルを利用します。

.envファイルはLaravelのプロジェクト直下に設置されています。

スクリーンショット 2020-06-02 17.32.58

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=【データーベース名】
DB_USERNAME=【ユーザー名】
DB_PASSWORD=【パスワード】

データーベース名、ユーザー名、パスワードは必須の項目でほとんどの場合はここをプロジェクト毎に書き換えるだけで設定は完了します。

MAMPを利用している方は少し特殊なのでこちらの記事を参考にしてください。



# テーブルの作成

Laravelからテーブルを作成する場合には「make:migration」コマンドを使います

「user_entry」というテーブルを作成することを例にします。

make:migrationコマンドを利用して、次のように入力します。

php artisan make:migration create_user_entry_table

make:migrationコマンドは次の形式で指定します。

php artisan make:migration 名前

マイグレーションファイルは実行時間がファイル名に含まれますので、実行時間_名前というファイルが作成されます。

今回は次のようなファイルが生成されました。

database/migrations/2020_06_02_092042_create_user_entry_table.php

引数に指定した名前を「create_作成したいテーブル名_table」の形で指定したため、自動的に「user_entry」テーブルを作成するコードが出来上がっています。

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUserEntryTable extends Migration
{
   /**
    * Run the migrations.
    *
    * @return void
    */
   public function up()
   {
       Schema::create('user_entry', function (Blueprint $table) {
           $table->id();
			$table->timestamps();
       });
   }
   /**
    * Reverse the migrations.
    *
    * @return void
    */
   public function down()
   {
       Schema::dropIfExists('user_entry');
   }
}

作成したマイグレーションファイルを実行して、user_entryテーブルを作成しましょう。

マイグレーションの実行は「migrate」コマンドを使います。

php artisan migrate

実行すると次のように表示されます。

Migrating: 2020_06_02_092152_create_user_entry_table
Migrated: 2020_06_02_092152_create_user_entry_table (0.02 seconds)

一度実行後はマイグレーション情報が記録されるため、二回目以降に再実行しても問題ないようになっています。

php artisan migrate
Nothing to migrate.

マイグレーションが実行できたら、phpMyAdminなどを利用して、user_entryテーブルが出来ていることを確認してください。

スクリーンショット 2020-06-02 18.27.43


# テーブルの構造を変更

user_entryはidとタイムスタンプ情報だけなので、新たにタイトルと本文のカラムを追加します。

カラムを追加するにもマイグレーションを作成する必要があります。

次のコマンドを入力してカラムの追加を行うためのマイグレーションを作成します。

php artisan make:migration add_column_user_entry_table --table=user_entry

名前は自由につけることができます。「--table=user_entry」を指定して、テーブル名を指定する必要があるのでご注意ください。

作成されたマイグレーションファイルを開いて、次のように変更してください。

Schema::table('user_entry', function (Blueprint $table) {
	//
});

Schema::table('user_entry', function (Blueprint $table) {
	$table->string('title');	//タイトル
	$table->string('body');	//本文
});

マイグレーションファイルを保存したらphp artisan migrateを実行してマイグレーションを行います。

php artisan migrate

次のように出力されます。

Migrating: 2020_06_02_093437_add_column_user_entry_table
Migrated: 2020_06_02_093437_add_column_user_entry_table (0 seconds)

このように、テーブルの構造が変化するたびに新しいマイグレーションファイルを作っていくのが基本的な流れです。

実際はテーブルの作成のためのマイグレーションを作成した段階でカラムを設定します。


# Seederの準備

Seederはテーブルにダミーデータやマスターデーターを挿入するための機能です。

Laravelでは初期データの挿入のことをSeeding(種まき)と呼びます。

make:seeder」コマンドを使ってuser_entryテーブルにデータを挿入するSeederを作成しましょう。

make:seederコマンドは次の形式です。

php artisan make:seeder シーダー名

ターミナルで次のコマンドを実行します。

php artisan make:seeder UserEntrySeeder

Seederはマイグレーションと異なり、クラスが生成されるのでUpperCamelCaseで名前を指定します。

これで次のファイルが生成されます。

database/seeds/UserEntrySeeder.php

こちらを次のように書き換えてください。

database/seeds/UserEntrySeeder.php


<?php
use Illuminate\Database\Seeder;
class UserEntrySeeder extends Seeder
{
   /**
    * Run the database seeds.
    *
    * @return void
    */
   public function run()
   {
       DB::table('user_entry')->insert([
           'title' => "ダミータイトル",
           'body' => "ダミー本文です",
       ]);
   }
}

作成が終わりましたら、Seederを実行します。

Seederの実行はdb:seedコマンドを使います。

php artisan db:seed --class=Seederのクラス名

ターミナルより次のコマンドを入力してください。

php artisan db:seed --class=UserEntrySeeder

Seederが問題なく実行できると次のように表示されます。

Database seeding completed successfully.

Seederはマイグレーションと異なり、何回も実行することができます。何回か実行してデータが入っていることを確認してください

4回実行した例

スクリーンショット 2020-06-02 18.49.03


Seederを起動するたびに「--class=UserEntrySeeder」と指定するのでは数が増えて大変なことになります。また、初期データとして必須なものなどがあるので、自動で実行出来るようにする機能がLaravelにあります。

UserEntrySeederを自動で実行出来るように登録しましょう。自動で登録するには「DatabaseSeeder」を書き換えます。

database/seeds/DatabaseSeeder.php

<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
   /**
    * Seed the application's database.
    *
    * @return void
    */
   public function run()
   {
       $this->call(UserEntrySeeder::class);
   }
}
$this->call(クラス名::class);

上記の形式でSeederの自動実行の登録が出来ます。

ファイルを保存後「php artisan db:seed」を実行して自動実行を確認してください。

php artisan db:seed


# 他のコマンド

他にも便利なコマンドがいくつかあるので例として上げてあります。

テーブルをリフレッシュするコマンド
php artisan migrate:refresh
実行すると全てのテーブルを消してSeederを再実行します。一番最初の状態に戻すため開発環境ではよく使います。
テーブルをリセットするコマンド
php artisan migrate:reset
実行すると全てのテーブルが削除されます。
マイグレーションの状態を確認する
php artisan migrate:status
実行するとどのマイグレーションを実行したか状態が確認できます。
php artisan db:wipe
実行するとマイグレーション情報を含めて全て削除されます。


# まとめ

本稿を振り返り、Laravelからデーターベースを利用することやテーブルの追加・変更する方法を確認してください。

また複雑なテーブルを作る方法など、マイグレーションに関する情報は公式サイトに詳しく乗っています。


おつかれさまでした!

---


完成まで突っ走る意気込みです。サポートしていただけると非常に嬉しいです。応援よろしくお願いします。