使用具有不同特征的GroupBy进行Laravel查询

时间:2017-10-17 15:18:37

标签: mysql laravel eloquent

试图找出如何显示具有此类数据的数据库的结果......

如果数据存储如下......

 Style              Color
  1. 优雅的帽子 - 红色
  2. 优雅帽子 - 蓝色
  3. 优雅帽子 - 黄色
  4. 时尚帽子 - 红色
  5. 时尚帽子 - 蓝色
  6. 清洁帽子 - 黑色
  7. 如果我想显示这样的数据

    优雅帽子

    颜色:红色,蓝色,黄色

    时尚帽子

    颜色:红色,蓝色

    清洁帽子

    颜色:黑色

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

1 个答案:

答案 0 :(得分:0)

你可以从模态中获取一个普通的集合,即。 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