【发布时间】:2021-09-18 15:28:19
【问题描述】:
我有一个与 Booking 有 hasMany 关系的 Affiliate 模型。
现在我想将预订日期介于 2 个给定日期之间的所有关联公司及其预订带入,并且只带上符合该限制的预订。
现在我明白了
$affiliate = Affiliate::whereHas('bookings', static function (Builder $builder) use ($params) {
$builder->whereOrAny('date','>=', $params['dateFrom']);
$builder->whereOrAny('date','<=', $params['dateTo']);
})->with('bookings');
这很好地过滤了包含在参数中的日期之间的预订的关联公司,但我还想过滤预订,因此生成的 $affiliates->bookings 仅包含具有这些给定日期之间的日期
例如,我有这样的东西
$affiliates = [
{
name : 'Example 1',
bookings : [
{
'date' : 2020-06-01
},
{
'date' : 2019-05-01
},
{
'date' : 2019-04-01
}
]
},
{
name : 'Example 2',
bookings : [
{
'date' : 2020-06-01
},
{
'date' : 2020-05-01
},
{
'date' : 2020-04-01
}
]
},
{
name : 'Example 3',
bookings : [
{
'date' : 2019-06-01
},
{
'date' : 2020-05-01
},
{
'date' : 2020-04-01
}
]
}
]
如果我使用 fromDate = 2019-01-01 和 toDate = 2019-31-12(2019 年的任何日期)进行过滤,则会返回类似这样的内容
$affiliatesFiltered = [
{
name : 'Example 1',
bookings : [
{
'date' : 2019-05-01
},
{
'date' : 2019-04-01
}
]
},
{
name : 'Example 3',
bookings : [
{
'date' : 2019-06-01
},
]
}
]
正如你所看到的,我不仅需要过滤附属公司,只带在这些日期之间有预订的人,而且只带这些日期之间的预订,我希望你们能帮助我
【问题讨论】:
-
日期 beetwen $builder->where([['date','>=', $params['dateFrom']], ['date','
-
在
with中应用whereOrAny与whereHas相同 -
或者你可以看看这个stackoverflow.com/a/29594039/8012110