условие для двух разных коллекций get внутри foreach l oop in laravel blade - PullRequest
1 голос
/ 06 февраля 2020

У меня есть две get коллекции для - 1) доступного времени и 2) времени бронирования.

Для доступного времени -

$availabletimes= AvailableTime::where('available_day_id', $availabledayid)
                               ->get(['available_time']);

Пример Вывод:

(3) [
     {available_time: "10:00:00"},
     {available_time: "12:00:00"},
     {available_time: "13:00:00"}
    ]

Для времени бронирования -

$bookingtimes = Appointment::where('specialist_id', $specialistid)
                           ->where('booking_date', '=', $date)
                           ->get(['booking_time']);

Пример вывода:

(2) [
     {booking_time: "10:00:00"},
     {booking_time: "13:00:00"}
    ]

Я хочу показать все доступные времена в блейд-файле и проверить, являются ли appointment_time и booking_time то же самое.

Внутри блейд-файла, я пытаюсь как-

@foreach ($availabletimes as $index => $element)    
<p>{{ $element->available_time }} - 
   {{--here I want to check if booking time is equal to available time--}}</p>
@endforeach

Ответы [ 4 ]

1 голос
/ 06 февраля 2020

используйте pluck, чтобы получить время в массиве

$bookingtimes = Appointment::where('specialist_id', $specialistid)
                           ->where('booking_date', '=', $date)
                           ->pluck('booking_time')->toArray();

. Таким образом, вы получите массив времен.

[0=>"10:00:00",1=>"13:00:00"];

Теперь вы можете использовать in_array() in foreach

@foreach ($availabletimes as $index => $element)    
<p>{{ $element->available_time }} - 
   @if(in_array($element->available_time,$bookingtimes)) 'time is available' @endif</p>
@endforeach
0 голосов
/ 06 февраля 2020

Я думаю, вы можете сделать простое left join между bookings и appointments на booking_time и available_time. Таким образом, вы можете полностью избежать проверки in_array () и просто l oop поверх результирующего набора в вашем блейд-файле, поскольку несопоставленные строки будут иметь значения NULL в столбце available_time в вашем окончательном наборе результатов.

Запрос: (дважды проверьте имена таблиц)

$time_details = DB::table('bookings bks')
                ->leftJoin('appointments appt', 'appt.available_time', '=', 'bks.booking_time')
                ->select('bks.booking_time','appt.available_time')
                ->where('appt.available_day_id','=',$availabledayid)
                ->where('bks.specialist_id','=',$specialistid)
                ->where('bks.booking_date','=',$date)
                ->get();

Файл блейда:

@foreach ($time_details as $detail)    
   @if(empty($detail->available_time))
      <p>{{ $detail->available_time }} - is not available.</p>   
   @else
      <p>{{ $detail->available_time }} - is available.</p> 
   @endif
@endforeach
0 голосов
/ 06 февраля 2020

Попробуйте это:

@foreach ($availabletimes as $index => $element)    
    <p>{{ $element->available_time }} - 
        @if(in_array($element->available_time,$booking_time))
          {{--not sure what you want in here--}}
        @endif
    </p>
@endforeach
0 голосов
/ 06 февраля 2020

Использование pluck () и isset ()

$availabletimes= AvailableTime::where('available_day_id', $availabledayid)
                               ->get(['available_time']);

$bookingtimes = Appointment::where('specialist_id', $specialistid)
                           ->where('booking_date', '=', $date)
                           ->pluck('booking_time','booking_time')->toArray();

@foreach ($availabletimes as $index => $element)  
  @if(isset($bookingtimes[$element->available_time]))  
   <p>$element->available_time</p>
  @endif
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...