Я пытаюсь запросить в своей базе данных выборку только тех строк, которые имеют статус «ПОДТВЕРЖДЕНО», но статус сохраняется в таблице журнала, а не в событиях, где мне нужно выполнить запрос. В таблице logs
хранится все состояние операции, а текущее состояние операции с идентификатором 1 - это последняя строка, вставленная с surgery_id
1. Как получить все события, операция которых имеет статус CONFIRMED
?
Это моя структура базы данных:
Surgery Events Log
id id id
patient_id surgery_id surgery_id
status_id
Я использую laravel v5.7.28 с базой данных postgresql.
Вкл. surgery
модель:
public function status()
{
return $this->hasMany(Cirurgia_log::class)
->orderBy('created_at', 'desc');
}
если я использую следующий код, вместо первого, я могу успешно получить последний статус:
public function status()
{
return $this->hasMany(Log::class)
->orderBy('created_at', 'desc')->first();
}
Но с этим я не могу использовать функцию whereHas
.
Отношение surgery
определено для Events
модели:
public function surgery()
{
return $this->belongsTo(Surgery::class, 'surgery_id');
}
Я пытался использовать приведенный ниже код, но с этим, если операция была ПОДТВЕРЖДЕНА, но теперь ОТМЕНЕНА, событие, соответствующее этой операции, также будет возвращено, как только эта операция уже будет когда-либо подтверждена.
Events::whereHas('surgery.status', function ($query){
$query->where('status_id', env('CONFIRMED'));
})->get();
Подводя итог, мне нужно выбрать только те события, когда операция, связанная с этим событием, имеет статус ПОДТВЕРЖДЕННЫЙ.