Laravel : 如何在视图 blade 的一行中显示来自数据库的多行

Laravel : How to show a multiple rows from DB in one row in view blade

在我的 Laravel 项目中,我的数据库中有多个行 table,除了 ID 外,其他列都相似

阶段table

ID name
1 first
2 second
3 third

学科Table

ID name stage_id
1 English 1
2 English 2
3 English 3

我需要像这样在 blade 中展示他们

# name stage
1 English first, two, three, etc

我的模态中已经有了关系,并且我已经在我的 blade 循环中显示了它们,但我只想按名称对行进行分组并显示不同的阶段

希望我解释的好,我不太会解释

更新:在编辑之前我现在写了一个虚拟数据我希望我能更详细地解释这个问题

这个项目的想法是你可以创造更多的教员 每个学院都有阶段和部分,每个部分都有专业,每个专业都有科目

现在关于主题和阶段 用户可以创建像英语这样的主题,并将其提供给第一阶段、第二阶段和第三阶段等(该学院的可用阶段)

舞台属于学院

主题属于阶段

所以关系是

主题模型

public function stage()
{
    return $this->belongsTo(Stage::class);
}

舞台模特

    public function subjects()
{
    return $this->hasMany(Subject::class);
}

因为你有多次“英语”,你应该有一个主题Table :

阶段table

ID name
1 first
2 second
3 third

主题table

ID name
1 English

stage_subject Table :

ID stage_id subject_id
1 1 1
1 2 1
1 3 1

主题模型

public function stage()
{
    return $this->belongsToMany(Stage::class);
}

舞台模特

    public function subjects()
{
    return $this->belongsToMany(Subject::class);
}

然后在你的 foreach 中:

@php($subjects = Subject::with('stages')->get())

@foreach($subjects as $subject)
  {{ $subject->id }} | {{$subject->name}} | {{$subject->stages->pluck('name')->implode(', ')}}
@endforeach

如果你不/不能做一个枢轴table,那么你可以使用集合:

@php($subjects = Subject::with('stages')->get())

@foreach($subjects->groupBy('name') as $name => $subjects)
  {{ $subjects->first()->id }} | {{$name}} | {{$subjects->pluck('stage.name')->implode(', ')}}
@endforeach