【问题标题】:How to sort data on php laravel before exporting them on .csv?如何在将数据导出到 .csv 之前对 php laravel 上的数据进行排序?
【发布时间】:2025-12-30 06:25:16
【问题描述】:

我正在尝试在将数据导出到 Excel 之前对其进行排序。这是我一直在使用的代码:

public function getDashboardReport2(){
    (...)
        echo "<tr><td>Group Name</td><td>Unit</td><td>Unit Number</td><td>First Name</td><td>Last Name</td><td>Phone Number</td></tr>";

        ($group = \App\Group::find($auth_event->group_id);
                $bookings = \App\EventBookings::where("group_id", "=", $auth_event->group_id)->get();
                if($bookings->count() > 0){
                    foreach ($bookings as $booking){

                        $egroup = \App\EventGroup::find($booking->eg_id); // Here I tried orderBy('name');
                        $chalet = \App\Chalet::find($booking->chalet_id);
                            if($egroup) {
                            $egroup_members = \App\EventGroupMembers::where("eg_id", "=", $egroup->eg_id)->get();
                            $row = 0;
                                if ($egroup_members->count() > 0) {
                                    foreach ($egroup_members as $egroup_member) {
                                    $row++;
                                    $user = \App\User::find($egroup_member->user_id);
                                        if ($user) {
                                        $charges = \App\EventBookingCharges::where("user_id", "=", $user->user_id)
                                        ->where("booking_id", "=", $booking->booking_id)->get();
                                        $paid_amount = 0;
                                        $balance_amount = 0;
                                            if ($charges->count() > 0) {
                                                foreach ($charges as $charge) {
                                                    if ($charge->status == 1) {
                                                        $paid_amount = $paid_amount + $charge->amount;
                                                    } else {
                                                        $balance_amount = $balance_amount + $charge->amount;
                                                    }
                                                }
                                            })
                                echo "<tr>";

                                    if ($row == 1) {
                                    echo "<td>" . $egroup->name . "</td>"; // Sort using this data
                                    } else {
                                    echo "<td></td>";
                                    }

                                    if ($row == 1) {
                                    echo "<td>" . ($chalet ? $chalet->name : '') . "</td>";
                                    } else {
                                    echo "<td></td>";
                                    }

                                echo "</tr>";
                                }
                            }
                        echo "<tr><td colspan='9'><br></td></tr>";
                        }
                    }
                }
            }
        echo "</table>";
    }
}

我该如何解决这个问题?我试过orderBy('name');,但没用。我也试过在谷歌上搜索它,但所有的教程都是关于排序数组的。

【问题讨论】:

  • 需要更多上下文和代码。 $row 来自哪里?你在哪里试过orderBy?结果是否来自数据库?细节,伙计!详情!
  • 对不起@ChrisSprague,先生。我更新了问题,请检查。感谢您的回复
  • 1.你似乎有很多东西可以在这里分类。那么你想要排序的是什么? 2.这看起来像laravel。也许你应该提一下,因为普通 php 没有排序的可能性
  • @Cashbee 我只需要按组名$egroup-&gt;name 对其进行排序。感谢您的回复
  • 这让我很困惑,因为 \App\EventGroup::find($booking->eg_id);仅返回 1 个 EventGroup,您无法对 1 个事物进行排序;)

标签: php laravel csv


【解决方案1】:

好的,我想我现在明白您要订购什么了。您想根据他们的 egroup 名称订购预订!

恐怕我看不到立即的答案,除非您不仅在预订表中保存了 eg_id,而且还保存了 eg_name。那么你可以做类似的事情

$bookings = \App\EventBookings::where("group_id", "=", $auth_event->group_id)->orderBy('eg_name')->get();

很抱歉无法提供更好的答案,但我希望我仍然可以提供帮助

【讨论】:

  • EventBookings 内部只有连接它们的eg_id ($egroup)。感谢你的回复。我很感激