laravel blade 中 foreach 循环内两个不同 'get' collection 的条件

condition for two different 'get' collection inside foreach loop in laravel blade

我有两个 get collections 用于 - 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"}
    ]

我想在blade文件中显示所有可用时间并检查appointment_timebooking_time是否相同。

在 blade 文件中,我正在尝试 -

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

使用pluck获取数组中的时间

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

通过这个你会得到一系列的时间。

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

现在您可以在 foreach

中使用 in_array()
@foreach ($availabletimes as $index => $element)    
<p>{{ $element->available_time }} - 
   @if(in_array($element->available_time,$bookingtimes)) 'time is available' @endif</p>
@endforeach

使用 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

试试这个:

@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

我认为您可以在 booking_timeavailable_time 上的 bookingsappointments 之间做一个简单的 left join 。这样您就可以完全避免 in_array() 检查并简单地遍历 blade 文件中的结果集,因为不匹配的行将在 available_time 列中具有 NULL 值在您的最终结果集中。

查询:(仔细检查您的 table 姓名)

$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();

Blade 文件:

@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