参考図書
Eloquentでは、レコードはモデルのインスタンスとして扱われる。ということは、新たにレコードを作成したい場合は、モデルのインスタンスを作成し、保存するというやり方になる。
以下の手順。
1.モデルのインスタンスを作成する
newをつかって作成できる
2.値を設定する
インスタンスのプロパティに値を設定する。
ひとつひとつのプロパティに値を代入してもよいし、値を設定するメソッドfill()
を利用するやり方もある。
3.インスタンスを保存する
モデルクラスには保存のためのsaveメソッドがある。これを呼び出すとインスタンスの内容がテーブルのレコードとしてデータベース側に保存される。
class Person extends Model{
protected $guarded = array('id');
public static $rules = array(
'name' => 'required',
'mail' => 'email',
'age' => 'integer|min:0|max:150'
);
public function getData(){
return $this->id . ': ' . $this->name . '(' . $this->age . ')';
}
}
バリデーションのルールはモデルに容易しておいたほうが便利。
$guarded
プロパティは入力のガード(保護)を設定しておくもの。例えばフォームから送信した値を元にインスタンスをつくり、保存する場合、モデルでは基本的に必要となるすべての項目に値が揃っていて初めて保存できる。だが時には値を用意しておかない項目も存在する。このようなときに用いれられるのが$guarded
。
例えばプライマリーキーであるidフィールドはデータベース側で自動的に番号を振るので、モデルを作成する際には値は必要ない。
public function add(Request $request){
return view('person.add');
}
public function create(Request $request){
$this->validate($request, Person::rules);
$person = new Person;
$form = $request->all();
unset($form['_token']);
$person->fill($form)->save;
return redirect('/person');
}
■バリデーションの実行
$this->validate($request, Person::$rules);
バリデーションは$request
そのものを引数に指定すれば、そこにあるさまざまな値をチェックできる。モデルにルールなどを保管しておけば、上記の第二引数のように、必要に応じて使える。
■Personインスタンスの作成
$person = new Person;
バリデーションを通過した保存作業。まず、Personインスタンスをnewで作成。
■値を用意
$form = $request->all();
unset($form['_token'])
保存する値を用意、送信されたフォームの値を使う。
ただし、フォームに追加される非表示フィールド「_token」だけはunsetで削除。
■インスタンスに値を設定して保存
$person->fill($form)->sace()
フォームの値がまとめられた$form
を引数にしてfillメソッドを呼び出す。fillは引数に用意されている配列の値をモデルのプロパティに代入するもの。まとまった値がある場合は、fillを使うことで個々のプロパティをまとめて設定できる。
値が設定されたらsaveを呼び出してインスタンすを保存する。
下記のように一つ一つの値をインスタンスに設定していってもOK.
$person = new Person;
$person->name = $request->name;
$person->mail = $request->mail;
$person->age = $request->age;
$person->save();