LoginSignup
3
4

More than 3 years have passed since last update.

Laravelモデル

Posted at

今回はmvcモデルのM(モデル)の作成をしていきます。

Model

モデルとはビジネスロジックを書く場所になります。また、データを処理したり、データをDBに保存するところです。逆に、DBから情報を取り出して、Controllerに送ったりしてくれます。
image
そして、Laravelでモデルを扱うにはEloquent ORM を使っていきます。

Eloquent ORM

Laravelで提供されているデータ操作のための機能で、「モデル」と「DB」を対応付けてくれます。ORMとは「Object Relational Mapping」の略称で、プログラミング技法のことです。これにより、DBから取得してきた情報をオブジェクトとして扱う事ができます。

Eloquentモデルの作り方

$ php artisan make:model モデル名

* モデル名はテーブルの単数形にする必要がある
このコマンドを打つとファイルが生成されるので、その中にmodelの定義などを書いていきます。また、他のテーブルとの紐付けもこのファイルで操作できます。コマンドを打ち、ファイルが作成されたら、ファイルに記述を加えていきます。


<?php

namespace App\Models\Modols;

// use Illuminate\Database\Eloquent\Factories\HasFactory;//テストで使うらしいです。
use Illuminate\Database\Eloquent\Model;

class Blog extends Model//上のモデルを継承してBlogというクラスを作っている
{
    // use HasFactory;//テストで使うらしいです。
    //テーブル名
    protected $table = 'blogs';//使いたいテーブル名を指定

    //可変項目
    protected $fillable = 
    [
        'title',
        'content'
    ];
}

$fillableとguarded

上記で可変項目として、'title','content'と書いてあると思いますが、ここについて説明していきます。
isertやcreateメソッドでテーブルのカラムに値を挿入する際、予期せぬ代入が起こる事を防ぐために、モデルへ、$fillable or $guardedを設定する必要があります。

予期せぬ代入とは

複数代入による予期せぬ代入とは、製作者が意図していない代入のことです。ユーザーから変えて欲しくない値(id,passwordなどの管理者権限を管理するカラム)を自由に変えられてしまっては困ります。そこで入力によって変動する値を安全に管理するために、$fillable or $guardedで値を管理します。

$fillable

$fillableとはホワイトリストと言い、複数代入時に代入を許可する属性を配列で設定します。解釈があってるか分かりませんが、変更可能な値を保存する時に使います。

protected $fillable = ['name','age','update_at'];

$guraded

$guardedは$fillableとは逆にブラックリストと言い、複数代入時に代入を許可しない属性と配列で設定します。変更して欲しくない値を保存する際に使います。両者の属性は併せて使うことはできません。


protected $guarded = ['id'];

他の生成メソッド

他にも属性の複数代入可能なメソッドが2つあります。firstOrCreatefirstOrNewです。

firstOrCreate

指定されたカラム/値ペアでデータベースレコードを見つけようとします。モデルがデータベースで見つからない場合には指定された属性でレコードが挿入されます。


$flight = App\Flight::firstOrCreate(['name'] => 'Flight 10');//属性のフライトを取得するか、存在しなければ作成

firstOrNew

指定されたデータベースのレコードを見つけようとします。モデルが見つからない場合は、新しいモデルインスタンスが返されます。こちらが返すモデルはデータベースに保存されません。保存するにはsaveメソッドが必要になります。

$flight = App\Flight::firstOrNew(['name'] => 'Flight 10');//属性のフライトか、存在しなければ、新しいインスタンスを取得する

モデル削除

モデルを削除する際には、モデルに対して、deleteメソッドを呼び出します。


$flight = App\Flight::find(1);
$flight =->delete();

上記ではdeleteメソッドを呼び出す前にデータベースからモデルを取得しています。しかしモデルの主キーが分かっているのならdestroyメソッドを使えます。これによりモデルを取得せずに削除できます。

App\Flight::destroy(1);
App\Flight::destroy([1,2,3]);

終わりに

基本的なモデルの説明でした。

参考サイト
https://snome.jp/framework/mvc-model/
https://qiita.com/kk_take/items/3e0639ed605f74c34619
https://udemy.benesse.co.jp/development/web/laravel-model.html

3
4
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
3
4