gpt4 book ai didi

php - Laravel Eloquent get where doesn't have, 搜索 wherehas 当不为 null

转载 作者:行者123 更新时间:2023-12-04 14:41:14 30 4
gpt4 key购买 nike

这个问题真的很难说,所以我为标题道歉!

假设我有一个 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'));
});
}

问题在于,这只会获取已预订且在指定日期之后可用的房间。我需要它能够搜索所有房间,如果它确实有预订,请检查到期日期是否在指定日期之后,如果它没有最新预订,无论如何都要将其作为空房间。

基本上我将如何构造我的过滤器函数以便它像这样运行

搜索所有房间,如果它有最新预订,检查它的到期日期是否在指定日期之后,只有在它为真/空时才捕获它,如果它没有最新预订那么无论如何捕获它作为它是空的

最佳答案

关于您的latestBookingRelationship,我有一个建议给您。您应该创建另一个关系并向其添加 greater than today 条件,并可能将其命名为 activeLatestBooking

然后,您最新的预订应包含所有预订房间,无论其预订是否有效。

public function activeLatestBooking(){
return $this->hasOne('App\Models\Bookings', 'room_id', 'id')
->where('expiry_date', '>', date('d/m/Y', strtotime('today')))->orderBy('expiry_date', 'DESC')->limit(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'));
})->orWhereDoesntHave('latestBooking');
}

过滤器查询的作用是:它获取所有 expiry_date 小于 vacant_from 日期的最新预订...以及 orWhereDoesntHave 获取所有从未被预订的房间。

关于php - Laravel Eloquent get where doesn't have, 搜索 wherehas 当不为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52095633/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com