Я пытаюсь отфильтровать мою модель по последней записи другой таблицы. Мои таблицы:
┌─────────┐ ┌─────────────────┐
socio historicoEstado
├─────────┤ ├─────────────────┤
id idSocio
... idEstado
fecha (date)
...
└─────────┘ └─────────────────┘
Дело в том, что я хочу красноречиво отфильтровать, чтобы увидеть, равен ли самый последний fecha idEstado
$estado
, и, если это так, добавить его в коллекцию, в противном случае пропустите это.
Я пытаюсь получить все historicoEstado.idSocio
, сгруппированные по idSocio
, и получаю самую последнюю запись, но не могу найти решение, вот что у меня сейчас есть:
$socios = $socios->whereIn('socio.id', function ($query) use ($estado) {
$query->select('idSocio')->from(DB::raw('historicoEstado as he'))
->whereRaw('fecha = (SELECT MAX(fecha) FROM historicoEstado he2 WHERE he2.idSocio = he.idSocio LIMIT 1)')
->where('idEstado', DB::raw($estado))
->groupBy('idSocio');
});
Какой код внутри функции, дает мне все записи, сгруппированные по idSocio
, которые в любой момент своей истории имели idEstado
, равный $estado
, мои записи:
idSocio idEstado fecha
1 1 1997-10-13 12:00:00
2 1 1997-10-13 12:00:00
2 2 1999-10-13 12:00:00
2 3 2001-10-13 12:00:00
2 1 2010-10-13 12:00:00
Если $estado
равно 1, я хочу получить socio
1 и 2, если мои $estado
равны 2, должны возвращаться пустыми, потому что нет socio
, где последний idEstado
равен 2.