Итак, я пытаюсь сделать запрос, отфильтрованный по диапазону дат.Проблема в том, что мне нужно выполнить запрос orWhereHas, который в настоящее время не подчиняется моему запросу whereBetween.
Так что у меня есть 2 таблицы Promos и Member_Promo.Чтобы получить предстоящие промо-акции для пользователя, я использую функцию типа Auth::user()->upcomingPromos('ytd')
.Функция выглядит следующим образом:
public function upcomingPromos($type)
{
switch ($type) {
case 'ytd':
$range = [Carbon::today(), Carbon::now()->endOfYear()];
break;
case 'mtd':
$range = [Carbon::today(), Carbon::now()->endOfMonth()];
break;
}
return Promo::where('owner_id', $this->id)
->whereBetween('date', $range)
->orWhereHas('members', function ($query) {
$query->where('user_id', $this->id);
})
->oldest('date')
->get();
}
Я хочу, чтобы конечным результатом были все промо-акции между диапазонами дат, в которых пользователь является либо:
- a.) Владельцем (промо-таблица с owner_id)
b.) участник (таблица members_promo с user_id).
Таким образом, список будет содержать все промо-акции, в которые они входят, в диапазоне дат.
В промо-таблице есть owner_id
и date
I поиск по.Таблица members_promo
- это просто стержень с user_id
и promo_id
.Проблема связана с тем, что orWhereHas не ограничивает этот запрос диапазоном дат.Поэтому, если пользователь является участником акции, которая не входит в этот диапазон, он все равно возвращается, когда не должен.