21
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【PHP】【Laravel】モデルの書き方とコントローラからの呼び出し方

Posted at

モデルの使い方がいまいちピンと来なかったので、改めて学習して備忘録として残しておきます。

モデルとは何か

  • DBのデータを操作する機能のこと。
  • テーブルに対応するモデルがあり、コントローラでモデルを操作すると、DBにデータを書き込んだり、DBからデータを削除したりできる。

具体的には

こちらの記事が参考になりました!!
【Laravel】モデル(Model)とは何か?命名規則やマイグレーションとの関連性|Eloquentやクエリビルダとは何か?

Eloquent

  • LaravelでDBを操作する際に使う。
  • 下図のように、DB操作のためのメソッドが沢山用意されている。
    スクリーンショット 2022-06-30 11.49.30.png

モデルにはどんな内容を書けば良いのか

  • 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'));
  }

以上になります。

21
16
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
21
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?