首页 > 解决方案 > Laravel 按日期和计数分组

问题描述

我正在尝试根据 start(date) 字段的计数向 Laravel eloquent 集合添加额外的信息。所以场景是我有一个“约会”表,如果任何一天有超过 10 个约会,我想向 eloquent 返回的集合中的对象添加额外的属性。我尝试了很多方法,例如分组和计数,但没有奏效。无论如何,我有下面的代码,我认为我非常接近它,但我一直在努力,但找不到如何让它实现我想要的。我想我被困住了,我不能再想了。我已经评论了大部分行。

        $allAppointments = Appointment::get($columns); //returning all the appointments

        $days = Appointment::get()->groupBy(function ($val) {
                return Carbon::parse($val->start)->format('d');
            }); //here I'm returning appointments by group without the count

        $counter = [];

        foreach ($days as $day => $appointments) {
            foreach ($appointments as $appointment) {

                if (Carbon::parse($appointment->start)->format('d') == $day) {
                    $counter = [Carbon::parse($appointment->start)->format('d') => $day]; //here I'm trying to make an array and count the days but not working
                }
                dd($counter);
                foreach ($allAppointments as $allAppointment) {
                    if (Carbon::parse($allAppointment->start)->format('d') == $day && count($counter) == 10) //here I want to compare the dates and check if that day have more than 10 appointments
                        $allAppointment->setAttribute('backgroundColor', 'red'); //here I want to add the extra information
                }
            }
        }

标签: laraveleloquent

解决方案


尝试以下操作:

    Appointment::select(DB::raw('if(count(*) > 10, true, false) as more_than_ten_appointment'))->groupBy(function ($val) {
            return Carbon::parse($val->start)->format('d');
        })->get();

如果 DB 类不存在,则在命名空间后添加:

use DB;

推荐阅读