Laravel5.1で予約サイトを作っています。
予約するには、名前などの他に、開始時間(start_time)と終了時間(end_time)をフォームから入力します。
予約内容は、データベースに保存しています。
したがって、多くの予約内容がデータベースに保存されています。
ここで、新たな予約をフォームから行うとき、同じ時間帯に被らないようにしたいです。
つまり、新たな予約者が、フォームに開始時間と終了時間を入力し、予約ボタンを押したとき、既存の予約で時間帯が被る予約が存在した場合にエラーを吐くようなバリデーションは可能でしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
gouf様、ありがとうございました。結局ControllerでValidationしました。
参考
http://laravel.com/docs/5.1/validation#other-validation-approaches
下記のようにstore()とupdate()にそれぞれコードを書きました。
PHP
1 public function store(Requests\ForwardingRequest $request) 2 { 3 $input = $request->all(); 4 5 $start = $input['start_time']; 6 $end = $input['end_time']; 7 8 $overlap_1 = Forwarding::where('start_time', '<=', $start)->where('end_time', '>', $start)->get(); 9 $overlap_2 = Forwarding::where('start_time', '>=', $start)->where('start_time', '<', $end)->get(); 10 11 if(count($overlap_1) == 0 && count($overlap_2) == 0){ 12 13 Forwarding::create($input); 14 15 return redirect('forwardings'); 16 } 17 else{ 18 return view('errors.overlap'); 19 } 20 21 } 22 23 public function update(Requests\ForwardingRequest $request, $id) 24 { 25 $forwarding = Forwarding::findOrFail($id); 26 $input = $request->all(); 27 $start = $input['start_time']; 28 $end = $input['end_time']; 29 30 $overlap_1 = Forwarding::whereNotIn('id', [$id])->where('start_time', '<=', $start)->where('end_time', '>', $start)->get(); 31 $overlap_2 = Forwarding::whereNotIn('id', [$id])->where('start_time', '>=', $start)->where('start_time', '<', $end)->get(); 32 33 if(count($overlap_1) == 0 && count($overlap_2) == 0){ 34 35 $forwarding->update($input); 36 37 return redirect('forwardings'); 38 } 39 else{ 40 return view('errors.overlap'); 41 } 42 } 43 44 45
投稿2015/09/26 22:08
退会済みユーザー
総合スコア0
0
日付に関するバリデーション(*1)の質問に回答したことがあるのですが、Laravel でも同様にカスタムバリデーション機能によって 実現できるのではないでしょうか
今回の場合、データベースに該当レコードがないか問い合わせる必要がありそうですね
簡単に調べてみましたが、何か参考になれば幸いです
*1) rails validatesについて(5046)|teratail
Link
投稿2015/09/26 13:01
総合スコア2321
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。