【问题标题】:Laravel Query using GroupBy with distinct traitsLaravel Query 使用具有不同特征的 GroupBy
【发布时间】:2018-03-29 08:24:25
【问题描述】:

试图弄清楚如何为具有此类数据的数据库显示结果...

如果数据是这样存储的……

 Style              Color
  1. 优雅帽子 - 红色
  2. 优雅帽子 - 蓝色
  3. 优雅帽子 - 黄色
  4. 时尚帽子 - 红色
  5. 时尚帽子 - 蓝色
  6. 干净的帽子 - 黑色

如果我想这样显示数据

优雅的帽子

颜色:红、蓝、黄

时尚帽子

颜色:红色、蓝色

清洁帽子

颜色:黑色

我不知道如何同时分组以及显示组内的不同特征。我看到了如何显示每个不同的计数的示例,但没有看到如何显示分组记录的唯一特征值。

【问题讨论】:

  • 1) 如果您尝试过一些代码,请粘贴,2) 您可能会在本节中查看文档:laravel.com/docs/5.5/eloquent-relationships,这篇文章可能对您有所帮助stackoverflow.com/questions/25847738/…
  • 我可以粘贴的代码没有多大帮助,因为它的行为符合 groupBy 查询的预期。通过在循环 IE 中编写循环,我能够在其他语言中实现这一点。外循环识别分组样式和查询唯一 ID 的内循环,但我不知道如何在 laravel 中做同样的事情,因为它在显示之前都经过调制和处理。这种关系不起作用,因为它都在一个表中,而不是与另一个表的关系

标签: mysql laravel eloquent


【解决方案1】:

您可以从模式中获取普通集合,即。 Styles::all()。然后在集合上使用groupBy 函数。

// Sample data as per database query
$data = collect([
    ['style' => 'classy hat', 'color' => 'red'],
    ['style' => 'classy hat', 'color' => 'orange'],
    ['style' => 'classy hat', 'color' => 'green'],
    ['style' => 'stylish hat', 'color' => 'blue'],
    ['style' => 'stylish hat', 'color' => 'orange'],
]);

$styles = $data->groupBy('style');

foreach ($styles as $style => $colors) {
    echo "<h1>" . $style . "</h1>";
    echo implode(', ', $colors->pluck('color')->toArray());
}

那会给你

优雅的帽子

红、橙、绿

时尚帽子

蓝色、橙色

或者,您可以构建所需的整个数组:

$styles = $data->groupBy('style')
    ->map(function ($styles) {
        return $styles->pluck('color');
    });

print_r($styles->toArray());

Array
(
[classy hat] => Array
    (
        [0] => red
        [1] => orange
        [2] => green
    )

[stylish hat] => Array
    (
        [0] => blue
        [1] => orange
    )

更新到打印

foreach ($styles->toArray() as $style => $colors) {
    echo "<h1>" . $style . "</h1>";
    echo implode(', ', $colors) . "<br />";
}

刀片视图更新

@foreach ($styles->toArray() as $style => $colors)
    <h1>{{ $style }}</h1>
    @foreach ($colors as $color)
        {{ $color }},
    @endforeach
    <!-- OR -->
    {{ implode(', ', $colors) }} 
@endforeach

【讨论】:

  • 在您的第二个示例中,代码看起来非常干净,但是如何像在第一个示例中那样将数组的名称作为标题输出?同样的方式?
  • 基本上相同的方式,除了在第二个例子中你只有颜色。因此,如果您愿意,您可以将$colors 内爆或循环遍历它们。我更新以反映打印。
  • 由于 laravel Blade 无法识别标准 php,因此出现内爆和回声问题。我需要使用 {{ $variable }} 语法,但在弄清楚如何将此内爆与刀片合并时遇到问题。
  • {{ implode(', ', $colors) }} 应该可以正常工作。或者,也可以使用 foreach 循环颜色,所以 @foreach ($colors as $color) {{ $color }} @endforeach
  • laravel Blade 可以识别标准的 PHP 顺便说一句。 工作得很好
猜你喜欢
  • 2018-03-25
  • 2021-05-01
  • 2020-06-03
  • 2012-08-28
  • 2021-04-09
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多