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
テーブルに新規レコードを作成しています。
動作確認
HelloController
の store
アクションを修正したので、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
インスタンスが追加されているのがわかります。
まとめ
- アクションにおいてリクエストパラメータを取得する
- リクエストパラメータによってモデルを操作する
- 必要に応じてリダイレクトなど、レスポンスを操作する