Фильтровать по другой таблице в Eloquent - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь отфильтровать мою модель по последней записи другой таблицы. Мои таблицы:

┌─────────┐   ┌─────────────────┐
  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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...