会場管理システムを構築しています。ランディングページで、利用可能なすべてのスロットを訪問者に表示しようとしています。すでに予約されているものは利用不可として表示されます。私は2つの変数を作成しました。1つはタイムテーブルからの情報を持ち、もう1つは予約テーブルからの情報を持ち、ブレードを使用して比較および表示するためにタイリングします。これは私がブレードに実装しようとしている方法です:
@foreach($times as $time)
@foreach($bookings as $booking)
<tr>
@if($time->availble_times == $booking->booking_time)
<td>{{$time->availble_times}}: not available</td>
@else
<tr><td>{{$time->availble_times}}</td>
@endif
</tr>
@endforeach
@endforeach
しかし、これが代わりに行うことは、bookingsテーブルの同じ数のレコードについて常に表示することです。予約テーブルに2つの行がある場合と同様に、時刻が2回表示されます。念のため、これが私のコントローラー関数です:
public function times(){
$times = Times::all();
$bookings = Bookings::all();
return view('/test2')->with('times', $times)->with('bookings', $bookings);
}
私は最近Laravelでこの問題を理解できませんでした。私の質問は、n回の表示の問題をどのように修正し、予約された時間と利用可能な時間をユーザーに示すことができますか?
私はあなたのデータがどのように見えるのかわかりませんが、コード列を見てavailble_times
およびbooking_time
は日付フィールドです。 Timesモデルが時間(1. 8.00、2。8:45、3。9:00など)のディクショナリであり、予約時間をTimesレコードに含める必要がある場合は、ループを反転させて、それぞれの時間を表示する必要があります。予約
@foreach($bookings as $booking)
@foreach($times as $time)
<tr>
<td>{{ getImaginedChairNumber() }}</td>
<td>{{ $time->availble_times }}</td>
@if($time->availble_times == $booking->booking_time)
{{-- There is already booking for that dictionary time --}}
<td>not available</td>
@else
<td>available</td>
@endif
</tr>
@endforeach
@endforeach
同様のテーブルを作成する必要があります:
╔═══════╦══════╦═══════════════╗
║ Chair ║ Time ║ Booking ║
╠═══════╬══════╬═══════════════╣
║ A1 ║ 8:00 ║ not available ║
║ A1 ║ 8:45 ║ available ║
║ A1 ║ 9:00 ║ not available ║
║ A2 ║ 8:00 ║ not available ║
║ A2 ║ 8:45 ║ not available ║
║ A2 ║ 9:00 ║ not available ║
║ A3 ║ 8:00 ║ available ║
║ A3 ║ 8:45 ║ available ║
║ A3 ║ 9:00 ║ not available ║
╚═══════╩══════╩═══════════════╝
これは、予想される出力テーブルの正しい形式ですか? (私はこのツールを使用してASCIIテーブルを描画しました https://senseful.github.io/web-tools/text-table/ )