我正在为具有用户和预订的应用程序进行一些报告。
目的是退还所有在过去两个月内未进行预订的用户。
我的查询目前返回所有在给定团队预订并按最新到最古老的预订的用户。
我的问题是,我只能在最后预订的情况下返回用户2个月以上的预订时间?
我当前的查询是:
$collection = User::whereHas('customerBookings', function($q) use ($teamId) {
$q->where('team_id', $teamId);
})->with(['customerBookings' => function ($q) use ($teamId) {
$q->where('team_id', $teamId);
$q->orderBy('estimated_booking_time', 'desc');
}])
->get();
这正确返回所有具有预订的用户(与预订表的关系),这些用户具有请求的team_id,然后仅返回符合相同要求的预订。
我要在集合上使用 ->拒绝,但我宁愿在查询本身中过滤。
理想情况下,我想用claus添加一些东西:
$q->where( FIRST RELATIONSHIP ITEM ->estimated_booking_time, '<=', Carbon::now()->subMonths(2) );
我的问题是我如何从关系中获得第一项,并使用它仅根据最后一项来返回用户。
您可以将where()
放入上次预订的时间(例如2个月前)减去时间now
。您也可能会查看此参考。我认为这与您类似。
您可能在用户与预订模型之间有着许多关系。用户模型确实具有与预订模型有关的"预订()"方法。
说,您可以做:
$users = AppUser::whereHas('bookings', function ($query) {
$query->where('lestimated_booking_time', '<=', Carbon::now()->subMonths(2));
});