Я вытягиваю свои волосы поверх этого, и я чувствую, что перепробовал каждый метод!
Вот моя проблема.
У меня 2 стола
ПОЛЬЗОВАТЕЛИ
ID | FIRSTNAME | EMAIL_ADDRESS
1 | Joe Bloggs | joe@bloggs.com
СОСТОЯНИЕ
ID | USER_ID | STATUS | DATE
1 | 1 | 'In' | 2018-06-04 09:01:00
2 | 1 | 'Out' | 2018-06-04 09:00:00
Как видно из приведенных выше таблиц, каждый пользователь может иметь много состояний ', ноу каждого пользователя должен быть один последний статус, который я делаю следующим образом (скажите, пожалуйста, если я делаю это неправильно)
public function statusCurrent(){
return $this->hasOne('App\Status', 'user_id', 'id')->orderBy('date', 'desc')->limit(1);
}
Затем я вижу форму, которая передает фильтрыКонтроллер через $request
.
Мне нужно иметь возможность использовать фильтры и применять их к 1 самому последнему состоянию.Например, если кто-то ищет дату 2018-06-04 09:00:00
и идентификатор пользователя 1
, мне нужно, чтобы он отображал НЕТ РЕЗУЛЬТАТОВ, потому что 1 самая последняя запись для этого пользователя не соответствует этой дате, но на данный момент она будетпросто перепрыгните через самый последний, если он не совпадает, и получите следующую запись, которая соответствует.
Я пробовал то, что похоже на каждый метод, я пробовал вот так
$users = Users::with(['StatusCurrent' => function($query){
$query->where('status.status', 'In');
}])->get();
Который получает правильную самую последнюю строку, но затем, если я пытаюсь вместо этого status.status, 'out'
, он просто перепрыгивает и получает запись номер 2, где отсутствует статус.
Я также пытался вот так
$users = Users::has('StatusCurrent')->paginate(10);
if(!empty($request->statusIn)){
$users = $users->filter(function ($item){
$item = $item->statusCurrent->status == 'in';
return $item;
});
}
return $users;
Это прекрасно работает, но затем разбивается на страницы при попытке добавить любые GET
параметры для фильтров.
Простой английский
Мне нужнобыть в состоянии получить самый последний статус для пользователя, а затем, когда он у меня есть, мне нужно иметь возможность применять там, где операторы / фильтры / аргументы к нему, и если они не совпадают, полностью игнорировать этого пользователя.