【发布时间】:2019-06-07 10:40:56
【问题描述】:
我正在尝试查询我的数据库以仅获取具有“已确认”状态的行,但状态保存在日志表中,而不是事件中,我需要在其中执行查询。 logs 表存储所有手术状态,ID 为 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();
总结起来,我只需要获取与该事件相关的手术具有 CONFIRMED 状态的事件。
【问题讨论】:
标签: laravel relationship laravel-5.7