У меня есть две таблицы, которые названы students
и cities
. Таблица students
имеет первичный ключ, связанный с таблицей cities
.
Таблица студентов: ![Students table](https://i.stack.imgur.com/rq1ES.png)
В веб-интерфейсе я хотел бы получить данные таблицы cities
с этими требованиями:
- Данные таблицы
students
должны быть сгруппированы по city_id
- Если в таблице
students
имеется более одной записи с одинаковым city_id
, выберите только самую последнюю записьгруппы. - Поиск в последних записях и выбор только тех студентов, которые неактивны.
Вот функция отношения модели city
:
public function student()
{
return $this->hasOne(Student::class, 'city_id', 'id')->orderByDesc('id');
}
Это моя функция контроллера:
$data = City::whereHas('student', function($query){
$query->where('is_active', 0)
})->with('student')->get();
Ожидаемый результат: С учетом данных примера запрос ничего не должен возвращать.
Текущий результат: Возвращает третью строку, поскольку во втором ряду есть неактивная запись ученика. Так что в этом случае условие where
не работает должным образом.
Я могу получить ожидаемый результат с помощью этого запроса SQL:
select *
from students s
where id = (select max(t2.id)
from students s2
where s.city_id = s2.city_id) AND is_active = '0';
Как я могу исправить эту логическую ошибку?