[Laravel入門]TODOアプリを作成しよう(TODOテーブルとモデルの作成)

[Laravel入門]TODOアプリを作成しよう(TODOテーブルとモデルの作成)Laravel

前回作成したLaravelのTODOアプリのモックに、TODO追加の機能を作成していきます。
今回はデータベースの用意と、テーブルにデータを追加するためのモデルの作成を行います。

前回の記事はこちらです。

データベースを作成する

TODOのデータが登録できるように、作成した開発環境のmysqlにデータベースを用意します。
開発環境の立ち上げは、下記のコマンドをプロジェクトディレクトリ配下で実行します。

docker-compose -f .docker_todo_list/docker-compose.yml up -d

Dockerの環境を立ち上げたら、phpMyAdminにアクセスします。
http://localhost:8086にアクセスすると、このように画面が開きます。

開いたら、SQLのタブのリンクをクリックします。

下記のcreate文を入力して、実行ボタンを押します。

create database todolist

実行後に左の一覧にデータベースが追加されました。

マイグレーションを作成して、実行する

データベースを作成したら、次にマイグレーションを作成して実行します。
マイグレーションを作成して実行することにより、TODOのデータを管理するテーブルを作成します。

マイグレーションファイルを作る

dockerのコンテナに入ります。

$ docker-compose -f .docker_todo_list/docker-compose.yml exec php /bin/bash

コンテナに入ったら、下記のコマンドでプロジェクト配下に移動します。

# cd todolist_app/

移動後にartisanコマンドを使用して、マイグレーションファイルを作ります。

# php artisan make:migration create_todos_table

マイグレーションファイルを編集する

プロジェクト配下の下記のパスにファイルが作成されています。(YYYY_MM_DDは作成年月日)

database/migrations/YYYY_MM_DD_052945_create_todos_table.php

このファイルを開いて編集します。

開くと、ファイルのupメソッドが下記のようになっています。

public function up()
{
    Schema::create('todos', function (Blueprint $table) {
        $table->id();
        $table->timestamps();
    });
}

このメソッドを下記のように修正して、保存します。

public function up()
{
    Schema::create('todos', function (Blueprint $table) {
    $table->id();
        $table->string('content')->comment('内容');
        $table->boolean('check')->comment('チェック状態')->default(false);
        $table->timestamps();
        $table->softDeletes()
    });
}

マイグレーションファイルのupメソッドは、マイグレーションを実行したときに処理が流れます。
Schema::createの第2引数にクロージャを書いて、テーブルのカラムを記述しています。

downメソッドもありますが、これにはロールバックしたときに流れる処理を書きます。
ここではSchema::dropIfExists('todos');と書いてあるので、ロールバックしたときにtodoテーブルがあれば削除されます。

マイグレーションを実行する

作成したマイグレーションのテーブルを作成するために、マイグレーションを実行します。
まずは、データベースの接続設定をしないといけません。

.envファイルを編集して、下記の箇所を書き換えます。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

このように、書き換えてください。
Dockerで作成したDBコンテナのデータベースに接続するように設定しています。

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=todolist
DB_USERNAME=root
DB_PASSWORD=password

書き終えたら保存します。
コンテナの中で、下記のマイグレーションコマンドを実行します。

# php artisan migrate

実行すると、下記のようにマイグレーションが当たっていることが確認できます。

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (105.46ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (82.93ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (86.54ms)
Migrating: 2021_05_10_052945_create_todos_table
Migrated:  2021_05_10_052945_create_todos_table (47.79ms)

作ったファイルのマイグレーションと一緒に、Laravelの標準で用意されているマイグレーションも実行されました。

phpMyAdminを開くと、下記のようにテーブルができていることが確認できます。

TODOを保存するためのテーブルの用意が完了しました。
次はLaravelで保存処理をするためのモデルを作成しましょう。

TODOモデルを作成して、編集する

保存処理を作成するために、DBのモデルを準備します。

TODOモデルを作成する

下記のコマンドをプロジェクト配下で実行して、Todoモデルを作成します。

php artisan make:model Todo

下記のパスにファイルが作成されました。
todolist_app/app/Models/Todo.php

モデルファイルの初期は、このようになっています。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Todo extends Model
{
    use HasFactory;
}

TODOモデルを編集する

下記のようにモデルファイルを編集します。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Todo extends Model
{
    use SoftDeletes;

    protected $guarded = ['id', 'created_at', 'updated_at', 'deleted_at'];
}

use HasFactoryは不要なので削除しました。
use SoftDeletes論理削除ができるようにしています。

モデルに$gurdedを設定しました。
これはデータベースの更新できないカラムの設定です。

終わりに

Todoテーブルの作成とTodoモデルの追加が完了しました。
artisanコマンドを使用することで、マイグレーションやモデルファイルは簡単に用意できることが確認できたかと思います。

次回は、作成したTodoテーブルとモデルを使用して、登録処理を作成しましょう。

コメント

タイトルとURLをコピーしました