LoginSignup
0
0

【Laravel】データ連携時のuse宣言を忘れずに

Posted at

Laravelを学習していて、use宣言の重要性に気づいたので記事にまとめました。

Laravel10で学習していたため、Laravel10の使用を前提としています。(新バージョンでも執筆時点ではこの点は変わっていないという認識です)

use宣言とは?

use宣言が何かを説明する前提として、MVCモデルについて簡単に説明します。

MVCモデルについて

LaravelはPHPのフレームワークで、「MVCモデル」という設計でアプリケーションを開発していきます。以下のように、役割を分担して記述していきます。

M(モデル)
データ処理関連。データベースとの連携。
V(ビュー)
ブラウザに表示される画面部分
C(コントローラー)
モデルとビューの橋渡しなど。ロジック部分。

この3つに加えて、

ルーター
リクエストをどのコントローラーのどのメソッドで処理するか割り振る
も必要になります。

データ処理関連はモデルに記載されているため、データベースの情報を使って何かしようとするときは、コントローラーに「●●というモデルを使うよ!」というお知らせをします。また、ルーターでも「○○というコントローラーを使うよ!」と知らせる必要があります。

これが「use宣言」です。

use宣言をする

例えば、以下のような機能を持たせたいとします。

  • 店のリストからお気に入り登録する
  • 店の情報にはエリア情報が紐づけられている
  • お気に入り登録した店を一覧表示する際、エリア情報も見たい

この場合、以下のような構成が考えられます。(ビューファイルは省略)

モデル コントローラー テーブル
Shop.php ShopController.php shops_table
Area.php AreaController.php areas_table
Favorite.php FavoriteController.php favorites_table

各テーブルの情報を利用してビューファイルに表示させるには、まずモデルにリレーションの記述をします。

モデル
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

               ~ リレーションのための記述 ~

モデルの中のuseはデフォルトで入ってくるものなのでそのままでOK。
リレーションのための記述(1対多など)を記載します。

コントローラーは以下のように記載します。ここでuse宣言です。

ShopController
<?php
namespace App\Http\Controllers;
use App\Models\Shop;
use App\Models\Area;

~ 下記省略 ~

お店の情報にエリア情報を紐づけるためにareas_tableに入っているデータを利用したいです。この場合、Areaモデルを使用しますとuse App\Models\Areaでuse宣言しています。use宣言をすることにより、Areaテーブルのデータを利用した処理ができるようになります。

つまり、use宣言していないと他が完璧でもデータベースから情報を持ってくることができません!

店をお気に入り登録する際は、shops_tableの情報を利用したいです。

FavoriteController
<?php
namespace App\Http\Controllers;
use App\Models\Favorite;
use App\Models\Shop;

~ 下記省略 ~

この場合、Shopモデルを使用しますとuse App\Models\Shopでuse宣言しています。このように、使いたいモデルがあるときはuse宣言します。

ルーター(web.php)には、内容にもよりますがShopController AreaController FavoriteController などの使用するコントローラーのuse宣言をします。

web.php
<?php
use Illuminate\Support\Facades\Route;

use App\Http\Controllers\ShopController;
use App\Http\Controllers\AreaController;
use App\Http\Controllers\FavoriteController;

~ 下記省略 ~

use宣言は書き忘れがち

use宣言は重要ですが、とにかく書き忘れがちです。(特に、後からモデルやコントローラーを追加したとき忘れがち…)

データが反映されない場合、ロジック部分やビューなどを見直しても原因不明なら、use宣言しているかもぜひ確かめてみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0