我正在尽最大努力弄清楚如何进行这项工作,但是我不确定采取正确的方法。我想跟踪一个药房的指标,特别是一个月内药房可以填充或补充多少患者。理想情况下,可以通过计算patients
模型中scripts
填充的fill_date
或prescription
的数量来实现。
例如,可以在1/1/18上将patient
约翰·史密斯写成script
,而在1/1 / 18、2 / 1/18上收到prescriptions
18年3月1日。我希望在我的指标中跟踪这些笔芯-但可以通过patient
或script
完成。这样我们就可以知道每月有多少患者(原始填充或替换填充)。
这是我的模型和关系的细分:
患者/脚本
patients
有很多scripts
,其中scripts
只能有1个patient
。患者就是您所期望的:医生的患者。他们通常去一次医生办公室,并为他们编写脚本。脚本是医生为患者编写的文件。他们将为患者编写并发送给药房。每个脚本都有一个prescribe_date
,以显示患者何时为他们编写了脚本。
脚本/处方
scripts
有很多prescriptions
,其中prescriptions
只能有1个script
。当药房收到脚本时,他们会看到病人的保险可以承保的范围,然后填写处方。处方是患者被批准和接受的处方,如果他们为处方补充了处方,则可能会连续数月获得处方。每个处方都有一个fill_date
,以显示他们何时收到填充/补充。
药房
pharmacies
有很多scripts
,其中scripts
只能有1个pharmacy
。药房是为编写的脚本添加标签的标识符,以便我们可以跟踪药房的指标。
这是我的代码:
药房模型(通过脚本关系链接处方)
// Pharmacies have many Scripts relationship
public function prescriptions() {
$this->load(['scripts.prescriptions' => function($query) use (&$relation) {
$relation = $query;
}]);
return $relation;
}
变量
$patients_current_month = $pharmacy
->prescriptions()
->whereBetween('fill_date', [$first_day_current_month, $last_day_current_month])
->count();
使用该方法,我可以每月获得药房的prescriptions
总数,但是我尝试了多种方案,但找不到一种方法来显示该病患者的人数fill_date
(根据他们的处方)。
答案 0 :(得分:0)
脚本和Pre 脚本的意思相同。您不需要两个表。但是,如果您要查找患者用药计划允许的药物,则将需要“药物”表和“覆盖”数据透视表。您还将需要一个“库存”数据透视表。
我不会告诉您所有关系,因为我认为您可以自己弄清楚这些关系,这将使答案太长。我几乎所有的代码都是伪代码。
这是我想出的:
患者
id|name
处方
id|patient_id|doctor_id|is_filled|pharmacy_id|drug_id|reason|timestamps|
药物
id|name|timestamps
药房
id|name
库存
drug_id|pharmacy_id
覆盖率
patient_id|drug_id
请注意,您可以通过添加要与Pivot放在一起的其他内容来将表用作数据透视表。这对于您的“处方”表可能会派上用场。
//Patient.php
public function drugs()
{
return $this->belongsToMany(Pharmacy::class, 'prescription')->withPivot('pharmacy_id');
}
//Gets how many prescriptions a patient has at pharmacy between dates
Patient::withCount(['prescription.drugs '=> function($query) use ($first_day_current_month, $last_day_current_month, $pharmacy_id){
$query->where('pharmacy_id', $pharmacy_id);
$query->whereBetween('created_at',[$first_day_current_month, $last_day_current_month]) //You can use whereBetween for dates
}])->get();
//Counts prescriptions filled by Pharmacy for a drug
Pharmacy::withCount(['drug' => function($query) use ($drug_id){
$query->where('drug_id', $drug_id);
//You can also count haw many drugs were sold at a pharmacy here
//and between what dates.
}])->get();
处方上的boolean字段已填充,使您能够查看患者是否正在填充。如果需要,可以将未填充的列设为0,将填充的列设为1,重新填充的列设为3。
我正在大量使用constraint eager loading来完成您想要的事情。