PHPバージョン:7.1.14
Laravelバージョン:5.7.9
前回までで、
Eloquentを使いデータベースからデータを取り出し
Viewに表示するところまで進みました!
今回はデータの追加を行っていきます!
データの追加
Eloquentによるデータの追加方法には大きく2つあります!
saveメソッド
まずはsaveメソッドです!
$article = new Article(); $article->name = '記事タイトル'; $article->body = '記事内容'; $user->save();
Model型でnewしてオブジェクトを作成し、
name, bodyの各フィールドに値を代入します。
最後にsave()メソッドの実行でデータの追加完了です。
createメソッド
2つ目はcreateメソッドです!
Article::create([ 'title' => '記事タイトル', 'body' => '記事内容', ]); create()メソッドを使う場合はnewする必要はなく、 またsave()メソッドを実行する必要もありません。 楽です。 ただこのままだと <span style="color: #ff0000"><b>MassAssignmentException</b></span> というエラーが出てしまいます。 Modelにて$fillableフィールドもしくは$guardedフィールドを設定する必要があります。 $fillableも$guardedも、どちらも予期せぬ値が代入されるのを防ぐ機能です。 *** $fillableフィールド $fillableは、代入を許可する値を指定します。 逆に言うと$fillableに指定されていない値へは代入することはできません。 >|php| <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Article extends Model { // ***** 開始 ***** protected $fillable = array('title', 'body'); // ***** 終了 ***** }
app>Models>Article.php
Modelクラスに定義されているフィールドです。
Articleクラスにてオーバーライドして値を設定しています。
これでMassAssignmentExceptionは発生しなくなりました。
$guardedフィールド
$guardedフィールドは、$fillableの真逆です。
代入を禁止する値を指定します。
逆に言えば$guardedに指定されていない値は代入できます。
例えばidなんかは外部から変更されたら困る値の代表です。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Article extends Model { // ***** 開始 ***** protected $guarded = array('id'); // ***** 終了 ***** }
app>Models>Article.php
この状態で実行しても、
$fillableを設定した時と同様エラーは起こりません。
$fillableと$guardedは片方だけ設定しておけば十分です。
今回はここまでです、ありがとうございました〜!