今回はmvcモデルのM(モデル)の作成をしていきます。
#Model
モデルとはビジネスロジックを書く場所になります。また、データを処理したり、データをDBに保存するところです。逆に、DBから情報を取り出して、Controllerに送ったりしてくれます。
そして、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つあります。firstOrCreate
とfirstOrNew
です。
###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