【问题标题】:How do i sort and group a query by date and group them in an array in Laravel如何按日期对查询进行排序和分组,并将它们分组到 Laravel 的数组中
【发布时间】:2014-07-27 12:14:03
【问题描述】:

我希望我的数据按日期分组并排序。然后我希望它在一个看起来像这样的数组中传递它:

这是我的查询:

$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 忍者 ;)

【问题讨论】:

  • 您的问题不清楚您要达到的目标,我猜您想要 1. 选择所有事件并按日期排序,或者您想要 2. 选择所有事件和组他们按日期是哪一个?
  • 我想按日期对它们进行分组和排序..

标签: php mysql arrays laravel eloquent


【解决方案1】:

我的解决方案。让我知道你是否会做得更聪明:

    $data = Input::all();

    $data['date'] = date("Y-m-d", strtotime($data['date']));

    $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();

    $events_by_date = array();
    $increment = 0;
    foreach($events as $event){
        $formatted_date = substr($event->date, 0, 10);

        if(!isset($temp_date)){
            $temp_date = $formatted_date;
        } else {
            if($temp_date != $formatted_date){
                $increment++;
                $temp_date = $formatted_date;
            }               
        }

        $events_by_date[$increment]['date'] = $formatted_date;
        $events_by_date[$increment]['events'][] = $event;
    }

    return View::make('event.overview')->with('events_by_date', $events_by_date);

【讨论】:

    【解决方案2】:

    我会像这样手动完成;

    $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 ...
        }
    }
    

    【讨论】:

    • 好的,我解决了。谢谢。我稍后会发布我的解决方案 - 谢谢!
    猜你喜欢
    • 2015-09-28
    • 2020-09-25
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 2017-06-13
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多