モデルの使い方がいまいちピンと来なかったので、改めて学習して備忘録として残しておきます。
モデルとは何か
- DBのデータを操作する機能のこと。
- テーブルに対応するモデルがあり、コントローラでモデルを操作すると、DBにデータを書き込んだり、DBからデータを削除したりできる。
具体的には
こちらの記事が参考になりました!!
【Laravel】モデル(Model)とは何か?命名規則やマイグレーションとの関連性|Eloquentやクエリビルダとは何か?
Eloquent
モデルにはどんな内容を書けば良いのか
- fillableとguarded(データ登録時、登録できるデータや登録させたくないデータを設定する機能)の設定
- 任意のメソッド
- Eloquentで発行するSQL
- SQLはコントローラに書いても良いが、コントローラのソースコードが長くなると読みにくくなるため、モデルに書くのがおすすめ。
- モデルに書いた場合はコントローラから呼び出す必要あり。
モデル書き方の例
ユーザ情報を取得するSQL
User.php
class User extends Model
{
$user = User::find(1); // id番号1のユーザ情報を取得
$user->email; // users.email の値を取得
}
Fruitモデルにcolorが赤色の物のみ抽出するSQLを書いた例
Fruit.php
class Fruit extends Model
{
use HasFactory;
protected $hidden = ['price', 'created_at', 'updated_at'];
protected $guarded = ['created_at', 'updated_at'];
// 自作メソッド
// $this::whereColorで、Colorカラムに’red’が指定されているものだけ取ってきて、呼び出し元に返しています。
public function fetchRedColorItems()
{
// モデル内では$thisで自分自身のことを指すことが可能
// get() は「結果を取得する」Eloquentのメソッド
return $this::whereColor('red')->get();
}
}
Customerモデルに男性の割合を計算するSQL、女性の割合を計算するSQLを書いた例
Customer.php
// 男性の割合を計算
public function mens()
{
$all = Customer::all()->count();
$mens_num = Customer::where('gender', 0)->count();
$mens_percent = round($mens_num / $all * 100);
return $mens_percent;
}
// 女性の割合を計算
public function womens()
{
$all = Customer::all()->count();
$womens_num = Customer::where('gender', 1)->count();
$womens_percent = round($womens_num / $all * 100);
return $womens_percent;
}
モデルで作ったメソッドをコントローラから呼び出す例
- 呼び出す時には、対象のモデルをnew(インスタンス化)してからメソッドを呼ぶようにします。
- コントローラからVIEWにreturnすることで、クライアント側に表示します。
FruitController.php
public function redFruitReport()
{
$fruitModel = new Fruit();
dd($fruitModel->fetchRedColorItems()->toArray());
}
return view('red_fruit_report');
ProductController.php
public function productReport()
{
$customer = new Customer;
$mens = $customer->mens();
$womens = $customer->womens();
return view('product_report',compact('mens', 'womens'));
}
以上になります。