【发布时间】:2018-08-30 11:13:08
【问题描述】:
这个问题真的很难说,所以我为标题道歉!
假设我有一个Rooms 模型和一个Bookings 模型,1 个房间可以有多个预订。
我正在构建一个带有过滤器的表,如果有预订,我需要能够对预订关系运行过滤器,否则无论如何都要抓取记录。
假设我的房间有这样的预订关系
public function latestBooking(){
return $this->hasOne('App\Models\Bookings', 'room_id', 'id')
->orderBy('expiry_date', 'DESC')->limit(1);
}
上述关系为我提供了最新的预订。
我正在像这样运行一个“空置”过滤器
if ($request->has('filters.vacant_from')) {
$rooms = $rooms->whereHas('latestBooking', function ($query) use ($request) {
$query->where('expiry_date', '<', Carbon::createFromFormat('d/m/Y',$request->input('filters.vacant_from'))->format('Y-m-d'));
});
}
问题在于,这只会获取已预订且在指定日期之后可用的房间。我需要它能够搜索所有房间,如果它确实有预订,请检查到期日期是否在指定日期之后,如果它没有最新预订,则将其作为空房间获取。
基本上我将如何构建我的过滤器函数,使其像这样运行
搜索所有房间,如果有最新预订,请检查其到期日期是否在指定日期之后,只有在其真实/空置时才抓取它,如果它没有最新预订,则无论如何都要抓取它它是空的
【问题讨论】:
标签: php laravel laravel-5 eloquent