見出し画像

【 PHP 】Laravel編⑦ MVCモデルの記述方法2 FirE♯524

Laravel編⑥ で、作ったファイルを使って、データベースを経由した
MVCモデルの設計を行います。



【 MVCモデル 】

Model   ・・・・・データベースとのやりとり 
View    ・・・・・見た目
Controller  ・・・・・処理

この3つの機能と、併せてこちらもあり。

Routing  ・・・・アクセス振り分け
Migration 
・・・・DBテーブルの履歴管理


【 前回のファイル 】

前回作ったファイルの流れは、このような流れでした。

① ユーザー/クライアントから受け取る
tests / testにアクセスする


②  <Routing>
app / routes / web.php ファイルが実行されます 

③  <Controller>
app / Http /  Controller / TestController
  へ処理が渡される

④  <View>
resources / view / tests / test.php へ処理が渡される

⑤ ユーザー/クライアントへ返す
test.php= 「test.bladeファイルです。」 が画面に出る


■  web.php

routesフォルダの中の、web.phpが、ルーティングファイルになります。

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});


use App\Http\Controllers\TestController;

Route::get('tests/test', [TestController::class, 'index']);



■  TestController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    //
    public function index()
    {
        return view('tests.test');
    }
}


■ test.blade.php

test.bladeファイルです。



表示されるのは、test.blade.phpの内容がそのままでした。


この表示を、データベースから持ってきたデータを表示するようにします。


【 コードを追記 】

■  TestController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Test;        ・・・・・解説①

class TestController extends Controller
{
    //
    public function index()
    {

        $values = Test::all();      ・・・・・解説②

        return view('tests.test', compact('values'));
        
    }
}

追記されたコードを見ていきます。


<解説①>

use App\Models\Test;        ・・・・・解説①

use で、Appの中の、Modelsの中の、Testファイルを引っ張ってきます。

ここで、モデルファイルであるTestを引っ張ってくることで、データベースとのデータのやり取りを可能にします。


<解説②>

$values = Test::all();      ・・・・・解説②

        return view('tests.test', compact('values'));

Test :: all( );  で、Testファイル全体を表示したものを、
$values に格納する。

$valuesviewファイルへ持っていく処理です。
compact関数を使って、変数を渡します。


▶︎  compact関数

変数名とその値から配列を作成します。
各引数について、compact() は現在のシンボルテーブルにおいてその名前を有する変数を探し、 変数名がキー、変数の値がそのキーに関する値となるように追加します。

compactを使うときは、変数名から$マークを削除した文字列を引数として指定することです。



■ test.blade.php

@foreach($values as $value)

{{$value->id}} <br>
{{$value->text}} <br>

@endforeach


TestController.phpから、$valuesが
viewファイルであるtest.blade.phpへ渡ってきます。

<解説>

@foreachで、$values$valueとして展開します。

$valuesの中身は、Test::all(); です。

Test::all(); の中身は、データベースの中身になります。

そこから
idの値を{{$value->id}}で、
textの値を{{$value->text}}で、
取り出しています。


▶︎ foreach文

Laravelのforeachは、@foreachと書きます。
foreachの最後に、@endforeachが必要になります。


<確認>

ブラウザで確認すると、
id の 1
text の aaa

id の 2
text の bbb
が表示されます。


<データベースを確認>

このように、
id 1 のtextは aaa です。
id 2 のtextは bbb です。

このデータベースの情報が、viewへ渡り、表示されたことが確認できます。

【 まとめ 】

MVCモデルについて書きました。

前回の記事と併せてご確認ください!!

この記事が気に入ったらサポートをしてみませんか?