Laravel 10days チャレンジ! 7日目 〜DBクラス編〜

Laravel

みなさんこんにちは、ちょいまけです。

今回は「Laravelをゼロから10日でどこまで習得できるのか」という企画の7日目です。

この企画が始まった経緯が知りたい方はコチラをご確認ください。

この記事では、LaravelでDBクラスを利用したデータベースへのアクセス方法についてまとめます。よろしければ、お付き合いください。

DBクラスとは

LaravelのDBクラスとは、DBへアクセスする処理をまとめたクラスのことです。このクラスを使うことで簡単にデータベースにアクセスすることができます。
DBクラスを利用してデータベースへアクセスする書き方は以下の通りです。

データの取得

DB::table('people')->get();

データの更新

DB::table('people')->where('id', 1)->update(['age' => 20]);

データの追加

DB::table('people')->insert([
  'name'  => 'jiro',
  'email' => 'jiro@wonderful.jp'
  'age'   => 1,
]);

データの削除

DB::table('people')->delete();

これらの機能を利用して、簡単なデータを扱うアプリを作ってみます。

アプリ作成

前回の記事で用意したpeopleテーブルを使って、データの登録、更新、削除を行うアプリを作ります。今までの記事で作成したMypageControllerの処理を変更した実装方法です。ソースの変更分の全てではなくポイントの部分だけ抜粋して説明します。


完成品イメージは以下の通りです。

データの表示

データの一覧表示処理はデータベースから値を取得する処理が必要です。取得した値をmypage/indexで表示することでこの機能を実現しています。

MypageControllerindexアクションを以下の処理に修正します。

public function index(Request $request)
{
    if(isset($request->id))
    {
        // リクエストにパラメータが指定されている場合は、指定のidのデータを取得
        $peoples = DB::table('people')->get()->where('id', $request->id);
    }
    else
    {
        // peopleテーブルの全データを取得
        $peoples = DB::table('people')->get();
    }

    // 集計データを全て渡す
    return view('mypage.index', [ 'peoples' => $peoples ]);
}

mypage/indexpeopleの一覧を表示するための処理を実装します。これで一覧表示は完成です。

{{-- content部分の表示 --}}
@section('content')
    <table>
        <tr>
            <th>Name</th>
            <th>Mail</th>
            <th>Age</th>
        </tr>
        @foreach ($peoples as $people)
            <tr>
                <td>{{$people->name}}</td>
                <td>{{$people->mail}}</td>
                <td>{{$people->age}}</td>
                <td><a href="mypage/edit?id={{ $people->id }}">更新</a></td>
                <td><a href="mypage/del?id={{ $people->id }}">削除</a></td>
            </tr>
        @endforeach
    </table>
    <a href="mypage/add">追加</a>
@endsection

データの追加

データの追加処理は、追加するデータの表示処理と追加実行処理の2つで実装しています。

MypageControllerに追加データ入力画面表示のaddと追加処理のcreateを追加します。

public function add()
{
    return view('mypage.add');
}

public function create(MypageRequest $request)
{
    $param = [
        'name' => $request->name,
        'mail' => $request->mail,
        'age'  => $request->age,
    ];

    // 入力されたデータを追加
    DB::table('people')->insert($param);

    return redirect('/mypage');
}

追加データ入力画面表示のため、mypage/add.blade.phpを追加し、以下の処理を実装します。これでデータ追加処理は完成です。

{{-- content部分の表示 --}}
@section('content')
    <table>

        {{-- エラー表示 --}}
        @if ($errors->any())
            <div>
                <ul>
                    @foreach ($errors->all() as $error)
                        <li>{{ $error }}</li>
                    @endforeach
                </ul>
            </div>
        @endif

        <form action="/mypage/add" method="POST">
            @csrf
            <tr>
                <th>Name:</th>
                <td><input type="text" name="name"></td>
            </tr>
            <tr>
                <th>Mail:</th>
                <td><input type="text" name="mail"></td>
            </tr>
            <tr>
                <th>Age:</th>
                <td><input type="text" name="age"></td>
            </tr>
            <tr>
                <th></th>
                <td><input type="submit" value="追加"></td>
            </tr>
        </form>
    </table>
@endsection

データの更新

データの更新処理は、更新するデータの表示処理と更新実行処理の2つで実装しています。

MypageControllerに更新データ入力画面用のeditと更新処理のupdateを追加します。

public function edit(Request $request)
{
    $people = DB::table('people')->where('id', $request->id)->first();

    return view('mypage.edit', ['id' => $request->id, 'people' => $people]);
}

public function update(MypageRequest $request)
{
    $param = [
        'name' => $request->name,
        'mail' => $request->mail,
        'age'  => $request->age,
    ];

    // 指定のidのデータを更新
    DB::table('people')->where('id', $request->id)->update($param);

    return redirect('/mypage');
}

更新データ入力画面用にmypage/edit.blade.phpを追加し、以下の処理を実装します。これでデータ更新処理は完成です。

{{-- content部分の表示 --}}
@section('content')
    <table>
        <form action="/mypage/edit" method="POST">
            @csrf

            <input type="hidden" name="id" value="{{ $id }}">
            <tr>
                <th>Name:</th>
                <td><input type="text" name="name" value="{{ $people->name }}"></td>
            </tr>
            <tr>
                <th>Mail:</th>
                <td><input type="text" name="mail" value="{{ $people->mail }}"></td>
            </tr>
            <tr>
                <th>Age:</th>
                <td><input type="text" name="age" value="{{ $people->age }}"></td>
            </tr>
            <tr>
                <th></th>
                <td><input type="submit" value="更新"></td>
            </tr>
        </form>
    </table>
@endsection

データの削除

データの削除処理は、削除するデータの表示処理と削除実行処理の2つで実装しています。

MypageControllerに削除データ画面表示用のdelと削除処理のremoveを追加します。

public function del(Request $request)
{
    $people = DB::table('people')->where('id', $request->id)->first();

    return view('mypage.del', ['id' => $request->id, 'people' => $people]);
}

public function remove(Request $request)
{
    // 指定のidのデータを削除
    $people = DB::table('people')->where('id', $request->id)->delete();

    return redirect('/mypage');
}

削除データ画面表示用にmypage/del.blade.phpを追加し、以下の処理を実装します。これでデータの削除処理は完成です。

{{-- content部分の表示 --}}
@section('content')
    <table>
        <form action="/mypage/del" method="POST">
            @csrf
            <input type="hidden" name="id" value="{{ $id }}">
            <tr>
                <th>Name:</th>
                <td>{{ $people->name }}</td>
            </tr>
            <tr>
                <th>Mail:</th>
                <td>{{ $people->mail }}</td>
            </tr>
            <tr>
                <th>Age:</th>
                <td>{{ $people->age }}</td>
            </tr>
            <tr>
                <th></th>
                <td><input type="submit" value="削除"></td>
            </tr>
        </form>
    </table>
@endsection

あとはルーティングなどの設定を行えばアプリの完成です。

さいごに

「Laravel 10days チャレンジ! 7日目 〜DBクラス編〜」いかがだったでしょうか?今回はDBクラスを利用したデータベースへのアクセス方法ついて紹介しました。

データベースへのアクセスができるようになると、やっと本格的にアプリが作ることができるようになると思います。この調子でどんどんできることを増やしていきたいです。

今回は以上です。
最後まで読んでいただきまして、ありがとうございました。

参考

コメント

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