laravel如何按年月日排序

laravel how to sort by year, month and date

我真的是 laravel 的新手,所以如果我说了一些愚蠢的话,我深表歉意,但我想根据 boletines 模型的 created_at 列制作一个手风琴。现在我有一个在视图中使用查询的半工作代码,但我的一个朋友说这不是一个好习惯。当我尝试添加过滤器时它也不起作用,因为当我将 whereYear() 添加到集合时它会损坏。

我希望它看起来像这样enter image description here

这就是我在控制器中的内容

public function boletinesAlertas()
{
    $monthsArray = ['01' => 'enero', '02' => 'febrero', '03' => 'marzo', '04' => 'abril', '05' => 'mayo', '06' => 'junio', '07' => 'julio', '08' => 'agosto', '09' => 'septiembre', '10' => 'octubre', '11' => 'noviembre', '12' => 'dciembre'];
   

    return view('private.boletinesAlertas', ['boletines' =>  new Boletines(), 'monthsArray' => $monthsArray]);
}

在视图中我有这个科学代码

@foreach ($years = getDates($boletines->pluck('created_at'), 0, 4) as $year)
    {{$year}}
    @foreach($months= getDates($boletines->whereYear('created_at', $year)->pluck('created_at'), 5,2) as $month)
        {{$monthsArray[$month]}}
        @foreach($days = getDates($boletines->whereYear('created_at', $year)->whereMonth('created_at', $month)->pluck('created_at'),8,2) as $day)
            {{$day}}
            <table>
                <tr>
                    <th>nombre</th>
                </tr>
                @foreach ($bolestines->whereDate('created_at', $year . '-' . $month . '-' . $day)->get() as $boletin)

                    <tr>
                        <td>{{$boletin->name}}</td>

                    </tr>
                @endforeach
            </table>
        @endforeach
    @endforeach
@endforeach

getDates 是我创建的一个辅助函数,它采用 created_at 和 2 个值来通过裁剪字符串来获取年月或日。

有更好的方法吗?不仅当我尝试在控制器中添加过滤器功能时它看起来很糟糕整个事情都停止工作并且由于某种原因我只显示第一个月的条目

您所尝试的可以通过收集的方式来实现。是的,您应该尝试在控制器方法中进行所有数据操作。

视图应该只负责格式化和显示数据。

试试下面的方法看看是不是你想要的

public function boletinesAlertas()
{
    $monthsArray = [
        '01' => 'enero', 
        '02' => 'febrero', 
        '03' => 'marzo', 
        '04' => 'abril', 
        '05' => 'mayo', 
        '06' => 'junio', 
        '07' => 'julio', 
        '08' => 'agosto', 
        '09' => 'septiembre', 
        '10' => 'octubre', 
        '11' => 'noviembre', 
        '12' => 'dciembre'
   ];

    $data = Boletines::get()->groupBy([
        function($item){
            return Carbon::parse($item->created_at)->format('Y');
        },
        function($item){
            return Carbon::parse($item->created_at)->format('m');
        },
        function($item){
            return Carbon::parse($item->created_at)->format('d');
        }    
    ]);
   

    return view('private.boletinesAlertas', [
        'data' =>  $data, 
        'monthsArray' => $monthsArray
    ]);
}
@foreach ($data as $year => $yearRows)
    {{$year}}
    @foreach($yearRows as $month => $monthRows)
        {{$monthsArray[$month]}}
        @foreach($monthRows as $day => $rows)
            {{$day}}
            <table>
                <tr>
                    <th>nombre</th>
                </tr>
                @foreach ($rows as $boletin)

                    <tr>
                        <td>{{$boletin->name}}</td>

                    </tr>
                @endforeach
            </table>
        @endforeach
    @endforeach
@endforeach