我如何使用Laravel中的雄辩查询来防止在表上重复名称

时间:2018-11-02 15:08:08

标签: laravel eloquent

我目前正在使用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();

here what i've got

1 个答案:

答案 0 :(得分:0)

最简单(但不是最漂亮)的方法是通过咨询找到所有患者。将这些患者排成一排,然后在刀片中循环浏览这些患者,并分别进行咨询。

控制器代码:

$active_patients = [];

foreach(Patient::all() as $patient) {
    if($patient->consultations->count()>0)
        array_push($active_patients,$patient);
}

将$ active_patients传递到您的视图,然后如下图所示对其进行循环。显然,我不知道您的Patient或Consultation模型的所有属性名称,您将需要根据需要修复html标记,但是您可以得到图片:

@foreach($active_patients as $patient)
    <p>{{$patient->name}}:</p>
    @foreach($patient->consultations as $consultation)
        <p>{{$consultation->date}}</p>
    @endforeach
@endforeach

免责声明:这不是最可靠的方法。这只是最简单的方法。做到这一点的最佳方法是结合使用范围查询和附加属性。例如,您可以使用“ whereHas”雄辩的查询方法查找所有已安排咨询的患者,从而在所有咨询患者的“患者”模型上建立范围。然后,您可以直接将它们作为ActivePatient进行引用,而不必在每次引用它们时都构建一个数组。您还可以将一个属性附加到咨询模型,该属性执行相同的操作并为特定用户获取每个咨询并创建嵌套的模型集合,但这涉及更多。如果您愿意,我很乐意与您共享该方法,但是以上代码至少会为您提供一种有效的方法来实现您的要求。