【问题标题】:Laravel : How to show a multiple rows from DB in one row in view bladeLaravel:如何在视图刀片中的一行中显示来自 DB 的多行
【发布时间】:2021-06-24 17:01:39
【问题描述】:

在我的 Laravel 项目中,我的 DB 表中有多行,除了 ID 和其他列称为阶段之外,其他所有内容都彼此相似

阶段表

ID name
1 first
2 second
3 third

科目表

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

我需要在这样的刀片中展示它们

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

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

希望我把案子解释清楚,我不是很擅长解释

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

这个项目的理念是你可以创造比教职员工更多的东西 每个学院都有阶段和部门,每个部门都有专业,每个专业都有科目

现在关于主题和阶段 用户可以创建像英语这样的主题,并使其可用于第一阶段和第二和第三..等(本学院可用的阶段)

阶段属于教师

主题属于舞台

所以关系是

主题模型

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

舞台模型

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

【问题讨论】:

  • 下一个问题请包含一些代码,这样更容易写出答案,不必假设一切。
  • 为什么同一个主题出现多次?

标签: laravel eloquent relational-database laravel-blade


【解决方案1】:

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

阶段表

ID name
1 first
2 second
3 third

主题表

ID name
1 English

stage_subject 表:

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

如果你不/不能做数据透视表,那么你可以使用集合:

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

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

【讨论】:

  • 我已经做了一个数据透视表,谢谢你,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 2020-09-13
  • 2020-10-10
  • 2017-09-28
  • 2018-06-22
  • 2019-08-31
相关资源
最近更新 更多