【问题标题】:Grouping MySQL results by date in PHP在 PHP 中按日期对 MySQL 结果进行分组
【发布时间】:2015-04-25 08:08:05
【问题描述】:

所以我发现自己陷入了困境。我正在使用Laravel 与 MySQL 一起为我的工作构建一个打卡/打卡网站。我这样做部分是因为我讨厌其他解决方案,部分是因为我想学习 Laravel 框架。我已经整理好打孔系统,一切正常,但现在我正在尝试设置仪表板,它将列出当前和过去的用户打孔。

如果用户在一天内多次进出,我想只显示一次日期以使事情看起来更清晰。

这是我的意思的一个例子:

现在左侧的所有列中都有日期。

现在我是 Laravel 的超级新手,所以我知道这段代码不是很好,我还有一些修复工作要做,但是谁能帮我弄清楚如何像上图那样对结果进行分组?

这是我当前的代码:

<?php $punches = App\User::find(Auth::user()->id)->punches()->orderBy('created_at', 'desc')->get() ?>
    <table class="table table-striped table-bordered">
        <th>Date</th>
        <th>In Time</th>
        <th>Out Time</th>
        @foreach($punches as $punch)
            <tr>
                <td>{{Carbon\Carbon::parse($punch->created_at)->format('F d, Y')}}</td>
                <td>{{Carbon\Carbon::parse($punch->inPunch)->format('h:i A')}}</td>
                <td>{{Carbon\Carbon::parse($punch->outPunch)->format('h:i A')}}</td>
            </tr>
        @endforeach
    </table>

欢迎提出任何问题。我会尽我所能快速回答。请,谢谢!

【问题讨论】:

  • 由于我对 laraval 没有经验,我会添加一个临时变量来保存 created_at 变量的最后一个值,然后在打印第一个单元格 (td) 之前,我会有一个将其值与临时变量进行比较的条件。

标签: php mysql laravel eloquent laravel-5


【解决方案1】:

您似乎不需要将它们分组。这只是显示日期何时更改的问题。每次新的 $punch 日期与之前的 $punch 不同时都会显示它。

<?php $current_date = null; ?>
@foreach($punches as $punch)
  <tr>
    <td>
      @if ($punch->created_at)->format('F d, Y') != $current_date)
        <?php $current_date = $punch->created_at)->format('F d, Y'); ?>
        {{ $current_date }}
      @endif
    </td>
    <td>{{Carbon\Carbon::parse($punch->inPunch)->format('h:i A')}}</td>
    <td>{{Carbon\Carbon::parse($punch->outPunch)->format('h:i A')}}</td>
  </tr>
@endforeach

我很抱歉刀片模板中的“丑陋”php 代码。我想展示所提议的解决方案的想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    相关资源
    最近更新 更多