0
0

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.

Laravelのモデルの新規保存【個人的なお勉強アウトプット】

Last updated at Posted at 2022-04-08

参考図書

Eloquentでは、レコードはモデルのインスタンスとして扱われる。ということは、新たにレコードを作成したい場合は、モデルのインスタンスを作成し、保存するというやり方になる。
以下の手順。

1.モデルのインスタンスを作成する
newをつかって作成できる

2.値を設定する
インスタンスのプロパティに値を設定する。
ひとつひとつのプロパティに値を代入してもよいし、値を設定するメソッドfill()を利用するやり方もある。

3.インスタンスを保存する
モデルクラスには保存のためのsaveメソッドがある。これを呼び出すとインスタンスの内容がテーブルのレコードとしてデータベース側に保存される。

app/Models/Person.php
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フィールドはデータベース側で自動的に番号を振るので、モデルを作成する際には値は必要ない。

app/Http/Controllers/PersonController.php
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();
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?