我目前正在使用laravel 5.6开发一个桌面管理应用程序。根据管理规定,患者可以按照指定的日期进行一次或多次会诊。当我显示咨询列表时,我有重复的相同名称,重复的名称对应于多次咨询的患者,我的问题是如何避免这种情况。我想要的是名称,以及这些咨询的所有日期。
class Consultation extends Model
{
public function patient()
{
return $this->belongsTo('App\Models\Patient');
}
}
class Patient extends Model
{
public function consultations()
{
return $this->hasMany('App\Models\Consultation');
}
}下面是查询:
$consultations = Consultation::all();

发布于 2018-11-03 01:57:11
要做到这一点,最简单(但不是最漂亮)的方法是简单地找到所有咨询过的患者。将这些患者放在一个数组中,然后在您的刀片中循环这些患者,并分别显示咨询。
控制器代码:
$active_patients = [];
foreach(Patient::all() as $patient) {
if($patient->consultations->count()>0)
array_push($active_patients,$patient);
}将$active_patients传递给视图,然后循环遍历它,如下所示。显然,我不知道您的患者或咨询模型的所有属性名称,您需要根据需要修复html标记,但您可以了解情况:
@foreach($active_patients as $patient)
<p>{{$patient->name}}:</p>
@foreach($patient->consultations as $consultation)
<p>{{$consultation->date}}</p>
@endforeach
@endforeach免责声明:这不是最健壮的方式。这是最简单的方法。做到这一点的最佳方法是结合使用作用域查询和附加属性。例如,您可以通过使用'whereHas‘雄辩的查询方法来查找已安排会诊的患者,从而为所有进行会诊的患者设置一个范围。然后,您可以直接将它们作为ActivePatient引用,而不必在每次引用它们时构建一个数组。您还可以将一个属性附加到协商模型,该模型执行相同的操作,获取特定用户的每个咨询,并创建一个嵌套的模型集合,但这涉及的内容要多得多。如果你愿意,我很乐意与你分享这个方法,但上面的代码至少会为你提供一个工作方法来实现你所要求的。
https://stackoverflow.com/questions/53121129
复制相似问题