Laravel - 19. アクション - モデルの呼び出し

それではここまでのアクションメソッドについてのまとめとして、 HelloController クラスの store アクションにモデルの操作を追加してみましょう。 store アクションにおいて以前に作成した Message モデルを参照し、新規レコードを作成するようにします。テキストエディタで app/Http/Controllers/HelloController.php を開いて store アクションを修正してみましょう。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use App\Message;
use App\Http\Requests\MessageRequest;

class HelloController extends Controller
{
    public function index()
    {
        $title = "Hello Model!";
        $messages = Message::orderBy("id")->get();
        return view("hello/index", compact("title", "messages"));
    }

    public function create()
    {
        return view("hello/create");
    }

    public function store(MessageRequest $request)
    {
        $text = $request->input("text");

        $message = new Message();
        $message->text = $text;
        $message->save();

        return redirect("/hello");
    }
}

store アクションの中で Message クラスのインスタンスを生成し、 text プロパティにリクエストパラメータを代入しています。その後 Message インスタンスに対して save メソッドを呼び出することでデータベースの messages テーブルに新規レコードを作成しています。

動作確認

HelloControllerstore アクションを修正したので、PHPのビルトインWebサーバを使ってWebアプリケーションを起動してみましょう。次のようにコマンドを入力します。

$ php artisan serve --host 0.0.0.0
Laravel development server started: http://0.0.0.0:8000

続いてブラウザを起動してWebアプリケーションにアクセスしてみましょう。

http://localhost:8000/hello/create

入力フォームが表示されるので、メッセージに Guten Tag と入力して送信ボタンをクリックします。

リダイレクト先の画面で作成したレコードが表示されます。

またここでは php artisan tinker を起動して、作成された messages レコードを確認してみましょう。

root@f7480c98bbf6:/var/www/hello_laravel# php artisan tinker
Psy Shell v0.10.4 (PHP 7.3.21 — cli) by Justin Hileman
>>> use App\Message
>>> Message::all()
=> Illuminate\Database\Eloquent\Collection {#3865
     all: [
       App\Message {#3459
         id: 1,
         text: "Hello",
         created_at: "2020-09-01 12:34:56",
         updated_at: "2020-09-01 12:34:56",
       },
       App\Message {#3827
         id: 2,
         text: "Bonjour",
         created_at: "2020-09-01 12:34:56",
         updated_at: "2020-09-01 12:34:56",
       },
       App\Message {#4074
         id: 3,
         text: "Ciao",
         created_at: "2020-09-01 12:34:56",
         updated_at: "2020-09-01 12:34:56",
       },
       App\Message {#4075
         id: 4,
         text: "Guten Tag",
         created_at: "2020-09-07 03:10:13",
         updated_at: "2020-09-07 03:10:13",
       },
     ],
   }
>>>

Message::all() の呼び出し結果に、新たな Message インスタンスが追加されているのがわかります。

まとめ

  • アクションにおいてリクエストパラメータを取得する
  • リクエストパラメータによってモデルを操作する
  • 必要に応じてリダイレクトなど、レスポンスを操作する