LoginSignup
0
2

More than 1 year has passed since last update.

【Laravel】fillableを使ってシンプルなコードにしてみる

Last updated at Posted at 2022-12-21

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へ登録してくれます。

0
2
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
2