はじめに
Laravelは「MVC(Model・View・Controller)」という設計パターンを採用しています。
しかし、
- モデルで取得した値はどうやってビューに渡すの?
- コントローラーはどんな役割?
- ビューではどうやって値を使うの?
といった部分で、最初は混乱しやすいです。
この記事では、実際のコード例を使いながら、モデル → コントローラー → ビューへの値の受け渡しの流れをわかりやすく解説します。
MVCとは?
まずは簡単に役割を整理します。
| 役割 | 内容 |
|---|---|
| Model | データベースとやり取りをする |
| Controller | 処理の流れを制御する |
| View | 画面表示を担当する |
流れとしては、
モデルでデータ取得
↓
コントローラーで受け取る
↓
ビューに渡す
↓
画面に表示
という形になります。
モデルでデータを取得する
今回は「商品データ」を取得する例で説明します。
Productモデル
// app/Models/Product.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
protected $table = 'products';
}このモデルを使って、コントローラーからデータを取得します。
コントローラーでモデルの値を取得する
ProductController.php
use App\Models\Product;
public function index()
{
$latest_products = Product::where('user_id', 1)
->whereIn('status', [1, 2])
->latest()
->take(10)
->get();
return view('index', [
'latest_products' => $latest_products,
]);
}ここでやっていること
Productモデルを使用- 条件を指定してデータを取得
$latest_productsに代入view()の第2引数でビューへ渡す
view() で値を渡す仕組み
return view('index', [
'latest_products' => $latest_products,
]);この部分がとても重要です。
コードの意味
- 左側(’latest_products’) → ビューで使える変数名
- 右側($latest_products) → コントローラーで作った変数
つまり、
コントローラーの $latest_products を、
ビューでは $latest_products として使える
ということです。
ビューで値を使う
resources/views/index.blade.php
@foreach($latest_products as $product)
<div class="product-item">
<h2>{{ $product->name }}</h2>
<p>{{ $product->price }}円</p>
</div>
@endforeachここでポイントなのは、
view()で渡した変数はBladeファイル内でそのまま使える
ということです。
データ受け渡しの全体像まとめ
【Model】
Product::where(…)->get();
↓
【Controller】
$latest_products に代入
↓
view(‘index’, [‘latest_products’ => $latest_products])
↓
【View】
$latest_products を使用
この流れがLaravelの基本形です。
よくある疑問
Q1. compactは使えるか?
もちろん使えます。
return view('index', compact('latest_products'));こちらの方がシンプルに書けます。
Q2. 変数名は同じでないとダメ?
同じでなくてもOKです。
return view('index', [
'products' => $latest_products,
]);この場合、ビューでは $products になります。
まとめ
Laravelでの値の受け渡しは、次の3ステップです。
- モデルでデータ取得
- コントローラーで受け取る
- view()でビューに渡す
MVCの流れや構造を理解するだけで、Laravelのコードは一気に読みやすくなり世界が変わります。
Laravelを扱う際は常にMVCを意識して開発に取り組みましょう。
