- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题真的很难说,所以我为标题道歉!
假设我有一个 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/
我正在从某个数据范围中选择所有ScheduledPrograms,其中包含属于某个用户的参加者。我想添加一个过滤器以仅选择数据透视字段 registered=1 所在的 SchduledProgram
我正在使用 Eloquent 构建应用程序并遇到了麻烦,我正在使用多对多 Pivot 关系。 引用:https://laravel.com/docs/5.0/eloquent#many-to-many
我有三个表: 交易模式: class Deal extends Model { protected $guarded = ['id']; public function hotel()
如何查询关系并仍然包含没有关系的模型?有两种型号 商店 产品 代码 // Store public function products() { $this->belongsToMany('App
这是我在这里发表的第一篇文章,所以请原谅任何错误:) 我目前正在从事库存管理应用程序(Laravel)的项目。我已经到了我所做的一切都不起作用的地步,所以现在我请求帮助。 我有一个包含产品的表,其中一
我有三个型号 Period , Post , User : period和 posts在 period_posts 上有 M:N 关系 posts和 user在 views 上有 M:N 关系 期间型
我正在努力避免 DRY在我的查询构建器中,特别是在链中添加额外的方法。 例如,这最初是我拥有的查询构建器: $products = $app->myShop->realProducts()
所以我想获得最后状态等于给定状态的请求我试过 first() 但它给了我一个错误并且限制不起作用 $requests = Request::whereHas('requestStatus', func
我有两个具有一对多关系的表。 预订 - (id) booking_tasks - (id, booking_id,user_id) 一个预订有很多任务一项任务有一个预订 预订模式: public f
我发现这些方法背后的概念和含义有点令人困惑,是否有人可以向我解释一下 has 和 with 之间的区别是,在示例的上下文中(如果可能的话)? 最佳答案 与 with() 用于急切加载。这基本上意味着,
我正在使用新的 whereHas 方法在 Laravel 4.1 中添加对急切加载关系的约束。 $broadcast = $broadcast->whereHas('season', function
我有两个表 - 联系人和访问: 联系人表 id | name ----- | ------- 1 | Joe 2 | Sally 访问表 id | con
我有两个具有多对多关系的主表和一个数据透视表。 模型“类型” public function attributes() { return $this->belongsT
假设我有两个模型, Block 和Slot 各自的表结构为:- blocks(id, name); slots(id, block_id, time, status); slots.status 的值
这是 Laravel 5 应用程序中 Eloquent 类之间的一些关系: B属于A B有一个C 表是用正确的外键构建的。这是 A 的作用域方法: public function scopeMySco
基于公寓查找器,显示/返回所有具有公寓的类型,基于表单搜索。这是使用 whereHas 查询完成的。 例如: A user has different choices; a garden/balcon
我使用此查询过滤掉具有城市和类别的商店。当我在 stores 表中有大约 1000 条记录时,它工作正常。现在,当我有 5000 条记录时,生成结果大约需要 3-10 秒。 在我的案例中,一家商店属于
这个问题是关于:Laravel (5.3) Eloquent - Relationship issue , 请访问此 url 以获取更多信息。 我最终得到了以下脚本: $genres = ['acti
问题:我只想在客户已经下了当年的订单的情况下获得他们。客户和订单位于两个单独的数据库中(这不能更改)。这些关系都已设置并正常工作,但是当我尝试以下操作时,我不断收到 SQL 错误,因为它试图在“客户”
目前我的模型集合中有这个 whereHas: $query = self::whereHas('club', function($q) use ($search) { $q->whereHas
我是一名优秀的程序员,十分优秀!