php - 我如何按日期对查询进行排序和分组,并将它们分组到 Laravel 中的数组中

标签 php mysql arrays laravel eloquent

我希望我的数据按日期分组并排序。然后我希望它将它传递到一个数组中,如下所示:

这是我的查询:

$events = Event::with('specifications', 'users', 'location')
                        ->join('locations','location_id', '=', 'events.location_id')
                        ->where('locations.zip', '=', $data['location'])
                        ->where('date', '>=', $data['date'])
                        ->orderBy('date')
                        ->get();

它给了我一个这样的数组:

[0] => Event Object
            (
                [...]
                [attributes:protected] => Array
                    (
                        [id] => 1
                        [title] => yyy
                        [image] => img/event/default.jpg
                        [desc] => Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing eli
                    )
                 [....]
              )
[1] => Event Object
                (
                    [...]
                    [attributes:protected] => Array
                        (
                            [id] => 2
                            [title] => xxx
                            [image] => img/event/default.jpg
                            [desc] => Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing eli
                        )
                     [....]
                  )

但我想要一个像这样排序和分组的数组(你知道我的意思;)):

[0] = array(
             [0] => date = xx.xx.xxxx
             [1] => array (
                          Event Object ()
                          )
           )
[1] = array(
                 [0] => date = yy.yy.yy
                 [1] => array (
                             Event Object ()
                              )
               )

这样我就可以在两个循环中遍历数组。一个用于日期,一个用于对象。像这个坏例子:

foreach($event_by_date as $evendate){
    <h2>$eventdate</h2>
    foreach($eventdate as $event){
        $event->name
        $event->desc
        ... etc ...
    }
}

我如何使用 Laravel 和 Eloquent 查询来做到这一点? 我不是 laravel/php 忍者 ;)

最佳答案

我会像这样手动完成;

$sortedArray =
    array_reduce(
         $events,
         function ($result, $element)
         {
              $result[$element->date][] = $element;
              return $result;
         }
    );

这里不需要排序,因为您的 $events 已经按日期排序了。

此外,您的代码无论如何都行不通,但使用我的代码您会:

foreach ($event_by_date as $date => $events) {
    <h2>$date</h2>
    foreach ($events as $event) {
        $event->name
        $event->desc
        ... etc ...
    }
}

关于php - 我如何按日期对查询进行排序和分组,并将它们分组到 Laravel 中的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24078203/

相关文章:

php - 如何计算对象数组与自定义比较函数的交集?

php - MySql 结合 LIMIT 和 ORDER BY

c++ - 为二维数组的动态分配获取奇怪的输出。我该如何解决这个问题?

mysql - 选择 MySQL Month() 作为空列

mysql - SQL 获取每个唯一 ID 的第一行以及第一行之后 x 时间内具有该 ID 的每一行

javascript - JavaScript/TypeScript 中带有字符串的连续分配数组

javascript - 通过属性对数组内的数组重新排序的最佳方法

php - Apple Production Push Notification 证书在新应用版本后无法连接

php - 让cookie永远存在?

java - 日期格式 JSON jqgrid