Есть сайт, где на стороне клиента происходит запись по времени.
БД Заказы:
Schema::create('orders', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('phone');
$table->string('email')->nullable();
$table->string('comment')->nullable();
$table->boolean('status')->default(true);
$table->date('date');
$table->string('service');
$table->string('price');
$table->time('time');
$table->string('description')->nullable();
$table->timestamps();
});
На стороне клиента я проверяю, не занято ли время на выбранную дату:
@foreach($times->sortBy('time') as $time)
<div class="form__radio">
<input class="form__radio-input" type="radio" name="time"
id="budget-{{$time->id}}" value="{{$time->time->format(config('app.time_format'))}}"
@if($time->isDisabled($date) || $time->isOrder($date)) disabled
@endif @if(old('time') == $time->time->format(config('app.time_format'))) checked @endif" >
<label class="form__radio-label"
for="budget-{{$time->id}}">{{$time->time->format('H:i')}}</label>
</div>
@endforeach
Метод, который проверят isOrder:
public function isOrder($date): bool
{
return Order::active()
->date($date)
->where('time', $this->time->format(config('app.time_format')))
->exists();
}
Получаются множество запросов к БД. Вопрос: нужно ли здесь использовать кеш или нужно менять логику бронирования? Опять же, если использовать кеш, то он должен быть динамическим на каждую дату?