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_time
和booking_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_time
和 available_time
上的 bookings
和 appointments
之间做一个简单的 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
我有两个 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_time
和booking_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_time
和 available_time
上的 bookings
和 appointments
之间做一个简单的 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