質問編集履歴
2
追加の質問に関しての情報追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -195,4 +195,144 @@
|
|
195
195
|

|
196
196
|
|
197
197
|
指定された日付の予約情報をすべて取得する関数のテスト
|
198
|
-

|
198
|
+

|
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
|
+

|
333
|
+
|
334
|
+
PHP側の処理の結果
|
335
|
+

|
336
|
+
|
337
|
+
Debugberで確認した実行されているSQL
|
338
|
+

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