fillableとは
Laravelを勉強していると度々出てくるfillable
ですが、意味もよくわからずただなんとなくモデルに書いていました。
fillableとはホワイトリストと呼ばれるもので、DBに登録をする際にシンプルな処理ができるとのこと。
1つずつrequestで受け取ってという記述をシンプルなものにしてくれるそうです。
実際のコード
$fillable
を使わない場合
public function store(TrRecordRequest $request) {
$validated = $request->safe()->only([
'part',
'menu',
'set_type',
'weight_first',
'reps_first'
]);
$trRecord = new TrRecord();
$trRecord->user_id = Auth::id();
$trRecord->part = $validated["part"];
$trRecord->menu = $validated["menu"];
$trRecord->set_type = $validated["set_type"];
$trRecord->weight_first = $validated["weight_first"];
$trRecord->reps_first = $validated["reps_first"];
$trRecord->weight_second = $request->weight_second;
$trRecord->reps_second = $request->reps_second;
$trRecord->weight_third = $request->weight_third;
$trRecord->reps_third = $request->reps_third;
$trRecord->weight_fourth = $request->weight_fourth;
$trRecord->reps_fourth = $request->reps_fourth;
$trRecord->weight_fifth = $request->weight_fifth;
$trRecord->reps_fifth = $request->reps_fifth;
$trRecord->memo = $request->memo;
$trRecord->tr_date = $request->tr_date;
$trRecord->save();
return redirect()->route('trrecords.index')->with(
'message', '登録が完了しました'
);
}
登録するカラムデータが多ければ多いほど、
可読性が悪くなり、コントローラへ書く量が増えてしまいますね。
$fillable
を使う場合
①モデルに$fillableを記述する
class TrRecord extends Model
{
use HasFactory;
protected $fillable = ['tr_date','part','menu', 'set_type', 'weight_first', 'reps_first', 'weight_second', 'reps_second', 'weight_third', 'reps_third', 'weight_fourth', 'reps_fourth', 'weight_fifth', 'reps_fifth', 'memo'];
}
②コントローラに記述をする
public function store(TrRecordRequest $request) {
$validated = $request->safe()->only([
'part',
'menu',
'set_type',
'weight_first',
'reps_first'
]);
$trRecord = new TrRecord();
$trRecord->user_id = Auth::id();
$trRecord->fill($request->all())->save();
return redirect()->route('trrecords.index')->with(
'message', '登録が完了しました'
);
}
かなりスッキリしました!
$trRecord->fill($request->all())->save();
この処理で$fillable
に記述したカラムを一括でDBへ登録してくれます。