コントローラーからモデルを利用する
モデルの利用方法をtinkerで確認してきました。
続いては実際にコントローラー上からモデルを利用してみましょう。
データの準備
コントローラーに処理を記述し始める前に、改めてmessagesテーブルにデータを準備しておきましょう。
$message = new App\Message();
$message->name = '山田太郎';
$message->body = '書き込みのテストです';
$message->save();
$message = new App\Message();
$message->name = '山本一郎';
$message->body = '2つめの書き込みのテストです';
$message->save();
$message = new App\Message();
$message->name = '山田花子';
$message->body = '3つめの書き込みのテストです';
$message->save();
tinkerから上記を実行しておきます。
コントローラからモデルを利用する。
では、SampleControllerからMessageモデルを利用してみましょう。
以下のメソッドをSampleControllerに追記します。
public function message_sample(){
$message = \App\Message::all()->first();
return view('message_sample',[
'message' => $message,
]);
}
\App\Message::all() の後に first() メソッドを利用することによって、全件のうち一つ目のレコードを取得しています。
続いて、viewを作成します。
message_sample.blade.php を追加して、
message_sample.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Messageモデルの利用</title>
</head>
<body>
<h1>Messageモデルの利用</h1>
<p>
{{ $message->name }}:
{{ $message->body }}
</p>
</body>
</html>
上記の内容で保存しましょう。
さらにルーティングを行います。
web.php
(略)
Route::get('/message_sample', 'SampleController@message_sample');
以上で完成です。
http://localhost/message_sample
(Docker Toolboxの場合は http://(dockerのipアドレス)/message_sample )
にアクセスして表示を確認してみましょう。
このように、Controllerのアクション内でモデルを利用してDB内の情報を取得し、viewに変数として渡すことでDB上のデータを利用したページを作成することができます。
モデルを利用することで、Controllerに直接DB操作のコードを書くよりもずっとシンプルな記述になります。