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 モデルによって取得した値をビューに表示できているのがわかります。

まとめ

  • コントローラのアクションメソッドからモデルにアクセスできる
  • モデルのメソッドを呼び出すことでデータベースを操作できる
  • モデルの操作結果をビューで表示する