# タスクリスト DB の作成

Laravel のセットアップが完了したら、 実際のアプリケーショ開発で利用する、テーブルの設計とテストデータの格納を進めていきましょう。

# テーブルのセットアップ

Laravel での データベースセットアップには、 通常 migration の機能を利用します。

migration の機能を利用することで、 Laravel アプリケーションで利用するデータベースのテーブル定義を コード上で管理することが可能になります。

まずは、migrateion を用いたテーブル管理のために、 migration の設定ファイルを作成しましょう。 設定ファイルは以下のコマンドで作成できます。

$ php artisan make:migration CreateTaskTable

database/migrations フォルダに 日付とcreate_task_table のファイル名で、 マイグレーション用のファイルが作成されます。

作成されたファイルの up と down のメソド内を以下の形で書き換えてください。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateTaskTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('task', function (Blueprint $table) {
            $table->id();
            $table->string("name");
            $table->unsignedInteger("priority")->default(3);
            $table->boolean("has_done")->default(false);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('task');
    }
}

コードが記述出来たら、 以下の migrate コマンドを実行して、 データベースに新しく定義したテーブル定義を展開します。

$ php artisan migrate

コードのミス等で、migrate をやり直したい場合には、migration のファイルを修正してから、 以下のコマンドを実行します。

$ php artisan migrate:fresh --seed

このコマンドは、データベース上の全てのデータを破棄して、 一からテーブル作成をやり直すコマンドですので、必ず開発用の環境でのみ利用するよう注意してください。

# Eloquent の作成

テーブルの作成準備が整ったら、今度は Eloquent を用意します。 Elouqnet は Laravel で用意されている テーブル操作のためのクラスで、 Eloquent を利用して、様々なテーブル操作が可能になります。

app フォルダ内に Models フォルダを作成し、 Eloquent クラスを格納します。 app/Models/Task.php を作成し、以下の内容を記述してください

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Task extends Model{

    protected $table = "task";
    
    protected $fillable = ["name","priority","has_done"];

}

Eloqeunt クラスは、 Illuminate\Database\Eloquent\Model を継承して作成します。

protected の $table プロパティでテーブル名を指定することで、 対象のテーブルにデータを追加したり、削除したりできるようになります。

$fillable は Eloquent 側のセキュリティ機能で、 外部からデータをセットできる列名を指定する記述です。

# Seeder の作成

Eloquent の準備が完了したら、Seeder を利用して、 データベースにサンプルの タスクデータを展開してみましょう。

サンプルのユーザデータ格納時に編集した、 database/seeds/DatabaseSeeder.php を開き以下のような形で run メソド内を編集します。

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        factory(\App\User::class,5)->create();

        $task = new \App\Models\Task();
        $task->name = "牛乳を買いに行く";
        $task->priority = 1;
        $task->save();

        $task = new \App\Models\Task();
        $task->name = "借りた本を読み切る";
        $task->priority = 2;
        $task->save();

        $task = new \App\Models\Task();
        $task->name = "部屋の掃除をする";
        $task->priority = 3;
        $task->save();

        $task = new \App\Models\Task();
        $task->name = "ゼミの課題に着手する";
        $task->priority = 4;
        $task->save();

        $task = new \App\Models\Task();
        $task->name = "旅行の予定を立てる";
        $task->priority = 5;
        $task->save();

        // $this->call(UserSeeder::class);
    }
}

作成した Eloquent クラスは、上記のように new 演算子でインスタンスを生成した後、プロパティで列の値を格納し 最後に save メソドをコールすることで、データベースにデータを格納できます。

DatabaseSeeder で定義したデータを再度 データベースに展開するために、 以下のコマンドでデータベースを一旦リセットして、 テストデータを再投入しておきましょう。

$ php artisan migrate:fresh --seed

データベースの task テーブルに サンプルで 5件のデータが格納されていれば、 データベースのセットアップは完了です。

# Check!

次のステップに進む前に以下の内容をもう一度確認しておきましょう。

  • データベースに tasks テーブルは正しく作成されていますか?
  • tasks テーブルには、指定した 5件のテストデータがそれぞれ格納されていますか?