我在拉威尔10班有一个myClss班,是这样的:

Type Name
type 1 名称2
type 2 名称1
type 1 姓名或名称3
type 3 名称4
type 3 名称5

我想在view中返回数据.Blade 如下List:

  • 类型1类型1
      • 名称%2
      • 名称%3
  • 类型2类型2
      • 名称%1
  • 类型3类型3
      • 名称%4
      • 名称5

我曾try 在GroupBy方法中使用eloquent,但我想不出如何通过一个查询实现这一点. 我还try 了使用SQL:

select type, name from table myclass
group by type

但没有得到我想要的,导致使用聚合方法(例如:Count...)进行分组工作.

我的 idea 是只返回类型,然后在视图中.Blade 用户必须单击不同的类型来获得相关的名称(如Filter)

My question :

有没有什么简单的方法,我可以只用一个查询(100),并且从第一次加载view.Blade开始,就像上面的列表一样?

谢谢.

推荐答案

要像返回嵌套列表一样返回结果,您需要在postgres上使用string_agg函数来连接.按类型分组的名称-

SELECT
    type,
    STRING_AGG(name, E'\n') AS names
FROM
    myclass
GROUP BY
    type;

在LALAVEL端,使用DB Facade-

$results = DB::select('
    SELECT
        type,
        STRING_AGG(name, E\'\n\') AS names
    FROM
        myclass
    GROUP BY
        type
');

对于Blade 视图,您需要迭代结果以显示如下数据:

@foreach($results as $row)
    <p>{{ $row->type }}</p>
    @foreach(explode('\n', $row->names) as $name)
        <p>{{ $name }}</p>
    @endforeach
@endforeach

Sql相关问答推荐

需要解决办法通过传递过程参数而不是声明表行类型来声明表类型

在postgresql中使用来自另一个字段的日期名称作为JSONB查询中的关键字

将有界时间周期作为阶跃函数,其中周期开始返回1,周期结束返回0

基于多个字段删除Access中的重复记录,同时保留最低优先级

删除MariaDB数据库中的JSON数据

如何更新SQLite数据库中的表?

SQL SELECT MOST NEST TIMESTAMP BEAT ORDER

如何在SQL中更新Json字符串

Select 非重复值并按条件排除行

如何简化此PostgreSQL查询以计算平均值?

如何在 SQL Server 中解决这个复杂的窗口查询?

给定 3 个键列,从一个表中 Select 另一表中不存在的所有数据

两个具有 NULL 值的表达式结果之间的差异

如何使用 join 和 where 子句从另一表中仅删除一个表中的值

如何在sparksql查询中使用日期值?

根据开始时间和结束时间计算has_impact字段

为重复的项目编号显示正在处理

PostgreSQL:通过数组的元素从另一个表中 Select 数据,然后按顺序显示

使用标准SQL 触发更新当前日期

使用一组值进行分组和计数