首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在laravel中使用eloquent query防止表上的重复名称

如何在laravel中使用eloquent query防止表上的重复名称
EN

Stack Overflow用户
提问于 2018-11-02 23:08:08
回答 1查看 259关注 0票数 1

我目前正在使用laravel 5.6开发一个桌面管理应用程序。根据管理规定,患者可以按照指定的日期进行一次或多次会诊。当我显示咨询列表时,我有重复的相同名称,重复的名称对应于多次咨询的患者,我的问题是如何避免这种情况。我想要的是名称,以及这些咨询的所有日期。

代码语言:javascript
复制
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');
    }
}

下面是查询:

代码语言:javascript
复制
$consultations = Consultation::all();

EN

回答 1

Stack Overflow用户

发布于 2018-11-03 01:57:11

要做到这一点,最简单(但不是最漂亮)的方法是简单地找到所有咨询过的患者。将这些患者放在一个数组中,然后在您的刀片中循环这些患者,并分别显示咨询。

控制器代码:

代码语言:javascript
复制
$active_patients = [];

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

将$active_patients传递给视图,然后循环遍历它,如下所示。显然,我不知道您的患者或咨询模型的所有属性名称,您需要根据需要修复html标记,但您可以了解情况:

代码语言:javascript
复制
@foreach($active_patients as $patient)
    <p>{{$patient->name}}:</p>
    @foreach($patient->consultations as $consultation)
        <p>{{$consultation->date}}</p>
    @endforeach
@endforeach

免责声明:这不是最健壮的方式。这是最简单的方法。做到这一点的最佳方法是结合使用作用域查询和附加属性。例如,您可以通过使用'whereHas‘雄辩的查询方法来查找已安排会诊的患者,从而为所有进行会诊的患者设置一个范围。然后,您可以直接将它们作为ActivePatient引用,而不必在每次引用它们时构建一个数组。您还可以将一个属性附加到协商模型,该模型执行相同的操作,获取特定用户的每个咨询,并创建一个嵌套的模型集合,但这涉及的内容要多得多。如果你愿意,我很乐意与你分享这个方法,但上面的代码至少会为你提供一个工作方法来实现你所要求的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53121129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档