teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

追加の質問に関しての情報追加

2019/12/12 00:52

投稿

kamille-mio
kamille-mio

スコア24

title CHANGED
File without changes
body CHANGED
@@ -195,4 +195,144 @@
195
195
  ![イメージ説明](7df1d1ccfa386cb3eb7b9318fbfc8735.png)
196
196
 
197
197
  指定された日付の予約情報をすべて取得する関数のテスト
198
- ![イメージ説明](cde7457b3568e535c50de245517684e8.png)
198
+ ![イメージ説明](cde7457b3568e535c50de245517684e8.png)
199
+
200
+ #### 追記
201
+
202
+ view
203
+
204
+ ```HTML
205
+ <body>
206
+ <div id="app">
207
+ <div clas="container">
208
+ <div class="row justify-content-center">
209
+ <div class="col-md-8">
210
+ <div class="card">
211
+ <div class='card-hearder'>{{ __('get-reservation' )}}</div>
212
+
213
+ <div class="card-body">
214
+ <form method="GET" action="javascript:void(0);" id="test">
215
+ <div class="form-group row">
216
+ <label for="facility_name" class="col-md-4 col-form-label text-md-right">{{ __('facility_name' )}}</label>
217
+
218
+ <div class="col-md-6">
219
+ <select class="form-control" id="facility_name" name="facility_name">
220
+ <option value="blank" selected="selected">選択してください</option>
221
+ <option value="test1">test1</option>
222
+ <option value="test2">test2</option>
223
+ <option value="test3">test4</option>
224
+ </select>
225
+
226
+ </div>
227
+ </div>
228
+
229
+ <div class="form-group row">
230
+ <label for="dates" class="col-md-4 col-form-label text-md-right">{{ __('dates' )}}</label>
231
+
232
+ <div class="col-md-6">
233
+ <input type="text" class="form-control dateinfo" placeholder="Select Date.." id="dateinfo" name="dateinfo" readonly="readonly">
234
+
235
+ </div>
236
+ </div>
237
+
238
+ <div class="form-group row">
239
+ <div class="col-md-8 offset-md-4">
240
+ <button type="submit" class="btn btn-primary" id="date-select">
241
+ {{ __('submit') }}
242
+ </button>
243
+
244
+ </div>
245
+ </div>
246
+ </form>
247
+ </div>
248
+ </div>
249
+ </div>
250
+ </div>
251
+ </div>
252
+ </div>
253
+
254
+ <script>
255
+ $(function () {
256
+
257
+ $(document).on("click", "#date-select", function() {
258
+ init_set_reservations();
259
+ });
260
+
261
+ // 1で発火したajaxでデータベースにアクセスして、テーブルから取得した日付の予約情報を取り出す。
262
+
263
+ function init_set_reservations () {
264
+
265
+ const server_url = "http://localhost:8000/"; // 使用しているサーバーのURLを定義
266
+
267
+
268
+ // フォームで送信されるデータの確認
269
+ var formData = $('#test').serialize();
270
+ console.log(formData);
271
+
272
+ // Ajax。今回は非同期で行いたい。
273
+
274
+ $.ajax({
275
+ type:'GET',
276
+ url: server_url + "/get-reserve",
277
+ datatype:'json',
278
+ data:{
279
+ dateinfo:$('#dateinfo').val(), // 日付選択のためのinputタグからの情報
280
+ facility_name:$('#facility_name').val() // 施設名選択のためのinputタグからの情報
281
+
282
+ }
283
+
284
+ }).done(function(data) {
285
+ console.log(data);
286
+ });
287
+ }
288
+ flatpickr(".dateinfo");
289
+
290
+
291
+
292
+ </script>
293
+ </body>
294
+ </html>
295
+ ```
296
+
297
+ ルーティング
298
+ ```php
299
+ Route::get('get-reserve', 'ReserveController@test');
300
+ ```
301
+
302
+ モデム側のメソッド
303
+ ```php
304
+ static function SearchReserveDates() {
305
+
306
+ $reserveinfo = \App\Reserve::whereHas('Facility', function($query){
307
+ $query->where('facility_name', "{$facility_name}")->whereDate('start_time', "{$reservedates}")->whereDate('end_time', "{$reservedates}");
308
+ })->select('id', 'start_time', 'end_time')->get()->all();
309
+ ```
310
+ コントローラー
311
+ ```php
312
+ public function test(){
313
+ if(isset($_GET['dateinfo']) && isset($_GET['facility_name'])) {
314
+
315
+ $reservedates = $_GET['dateinfo'];
316
+ $facility_name = $_GET['facility_name'];
317
+
318
+ $reserveinfo = Reserve::SearchReserveDates();// モデムのメソッドをそのまま書いたものでも同様の結果になる
319
+
320
+ \Debugbar::info($reserveinfo);
321
+
322
+ $json = json_encode($reserveinfo, JSON_PRETTY_PRINT);
323
+
324
+ } else {
325
+ dd($reservedates);
326
+ dd($facility_name);
327
+ }
328
+ }
329
+ ```
330
+
331
+ console.log(formData)
332
+ ![イメージ説明](6333ac4e5dcc461211dbc992add83b83.png)
333
+
334
+ PHP側の処理の結果
335
+ ![イメージ説明](17ffffdaeb0e2f070242a906eb510366.png)
336
+
337
+ Debugberで確認した実行されているSQL
338
+ ![イメージ説明](7dca3f66f670744b24a1c8b96b516790.png)

1

スペルミス修正

2019/12/12 00:52

投稿

kamille-mio
kamille-mio

スコア24

title CHANGED
File without changes
body CHANGED
@@ -20,7 +20,7 @@
20
20
  ## 質問したいこと
21
21
  flatpickrなどのカレンダーライブラリを用いて、下記のアクティビティ図のような処理を想定した処理を書いているのですが、時間帯選択のフォームは最初表示されていない状態で施設名と日付をサーバーに送信したあとにアクティビティ図のような処理を適用したあとで、時間帯選択のフォームをフェードインのようなアニメーションで表示させたいと思い、Ajaxを使った処理を書いていたのですがJavascriptに慣れていないので、PHP側から帰ってきた後の処理を考えていたところ詰まってしまったため今回質問させていただきました。
22
22
 
23
- 具体的には他のユーザーがその日の施設の予約を取る際に、別のユーザーがすでに同日・同施設に予約入れている場合、その時間帯を選択できないようにしたいので、取得してきた各予約情報の中から利用開始時間と利用終了時間を参照して、それを元に例えばflatpickrなら下記のminTimeやmaxTimeに設定する値を求めたいがその書き方がわからないといったといころです。
23
+ 具体的には他のユーザーがその日の施設の予約を取る際に、別のユーザーがすでに同日・同施設に予約入れている場合、その時間帯を選択できないようにしたいので、取得してきた各予約情報の中から利用開始時間と利用終了時間を参照して、それを元に例えばflatpickrなら下記のminTimeやmaxTimeに設定する値を求めたいがその書き方がわからないといったといころです。
24
24
 
25
25
  ```Javascript
26
26
  const config = {