Laravel - 12. モデル - コントローラとモデル
これまでの学習のまとめとして、コントローラからモデルを呼び出すプログラムを作成します。
以前に作成した HelloController (app/Http/Controllers/HelloController.php)
の index
アクションを修正します。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Message;
class HelloController extends Controller
{
public function index()
{
$title = "Hello Model!";
$messages = Message::orderBy("id")->get();
return view("hello/index", compact("title", "messages"));
}
}
ここではクラス定義の前に use App\Message;
を追加している点に注意してください。これによって HelloController
において Message
クラスを利用できるようになります。また index
アクションの中では以下のように Message
モデルにアクセスしています。
$messages = Message::orderBy("id")->get();
上記のプログラムでは messages
テーブルの全レコードを id
列で昇順にソートして取得しています。ここで作成した $messages
変数を次のビューファイル( resources/views/hello/index.blade.php
)で参照するようにします。
@extends('layout.app')
@section('content')
<h1>{{ $title }}</h1>
<ul>
@foreach ($messages as $message)
@if (mb_strlen($message->text) >= 5)
<li>{{ $message->text }}</li>
@endif
@endforeach
</ul>
@endsection
ここでは $messages
変数を @foreach
ディレクティブで繰り返し処理をしています。また繰り返しの中では Message
インスタンスの text
プロパティが5文字以上かどうかを確認して出力しています。
動作確認
コントローラとビューを修正したので、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
実行結果から Message
モデルによって取得した値をビューに表示できているのがわかります。
まとめ
- コントローラのアクションメソッドからモデルにアクセスできる
- モデルのメソッドを呼び出すことでデータベースを操作できる
- モデルの操作結果をビューで表示する