【问题标题】:Laravel - pagination sorting by created_atLaravel - created_at 分页排序
【发布时间】:2019-11-24 16:32:15
【问题描述】:

所以伙计们,我在我的项目中添加了分页,我快完成了,顺便说一句,女巫是我的第一个项目,我现在需要做的就是通过 created_at 设置分页。所以我需要发布帖子从同一天在同一页面链接。现在它在一页上显示不同日子的帖子。之后我只需要显示当天的价格总和。如果你知道请帮助我,这将是我作为学生的第一个项目,我还在学习。谢谢!!

这是我的 HomeController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use App\Post;
use DB;
use Auth;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        $posts = Post::where('user_id', Auth::id())->orderBy('created_at', 'DESC')
        ->paginate(3);
        return view('home')->with('posts', $posts);
    }


}

这是我的 home.blade.php

@extends('layouts.theme')

@section('content')
    <style>
        body{
            margin: 0;
            background-color: #EBEBEB;
        }
    </style>
    <div class="mainl">
        <div class="row">
            <div class="columna">



                <h1>{{ Auth::user()->name }}</h1>
                <hr>
            </div>

            <div class="columns">
                <a href="{{ route('logout') }}" id="logout"
                onclick="event.preventDefault();
                        document.getElementById('logout-form').submit();">
                    {{ __('LOGOUT') }}
                </a>

                <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
                    @csrf
                </form>

            </div>
        </div>
        </br></br></br>

        @if(count($posts)> 0)
        <table>
            <thead>
                <tr>
                    <th>BR.KESICE</th>
                    <th>IME I PREZIME</th>
                    <th>BR.TELEFONA</th>
                    <th>POSAO</th>
                    <th>CIJENA</th>
                    <th>PLACANJE</th>
                    <th>POPUST</th>
                    <th>DATUM PREUZ.</th>
                    <th>DATUM IZDAV.</th>
                    <th>SMJENA</th>
                    <th>RADNIK</th>
                    <th>STATUS</th>
                    <th>IZMIJENI</th>

                </tr>
            </thead>
            <tbody>
                @foreach($posts as $post)
                <tr>
                    <td>{{$post->br_kesice}}</td>
                    <td>{{$post->ime}}</td>
                    <td>{{$post->br_telefona}}</td>
                    <td>{{$post->posao}}</td>
                    <td>{{$post->cijena}}</td>
                    <td>{{$post->placanje}}</td>
                    <td>{{$post->popust}}</td>
                    <td>{{$post->datum_preuz}}</td>
                    @if($post->status == 1)
                        <td>/</td>
                    @else
                        <td>{{$post->datum_izdav}}</td>
                    @endif
                    <td>{{$post->smjena}}</td>
                    <td>{{$post->radnik}}</td>
                    <td>
                        @if($post->status == 0)
                        <span class="label label-primary" id="statusdeaktivan">Deaktivan</span>
                        @elseif($post->status == 1)
                        <span class="label label-success" id="statusaktivan">Aktivan</span>
                        @elseif($post->status == 2)
                        <span class="label label-danger" id="statusdeaktivan">Rejected</span>
                        @else
                        <span class="label label-info" id="statusdeaktivan">Deaktivan</span>
                        @endif
                    </td>
                    @if($post->status == 3)

                    @else
                    <td><a href="posts/{{$post->id}}/edit" class="edit"><i class="far fa-edit"></i></a></td>
                    @endif

                </tr>

                @endforeach
            </tbody>
            <tfoot>
                <tr>
                    <th>UKUPAN IZNOS:&nbsp;&nbsp;{{ Auth::user()->posts->sum('cijena')}}&euro;</th>
                    <th>KARTICA:&nbsp;&nbsp;{{ Auth::user()->posts->where('placanje', 'Kartica')->sum('cijena')}}&euro;</th>
                    <th>GOTOVINA:&nbsp;&nbsp;{{ Auth::user()->posts->where('placanje', 'Gotovina')->sum('cijena')}}&euro;</th>
                    <th>VIRMAN:&nbsp;&nbsp;{{ Auth::user()->posts->where('placanje', 'Virman')->sum('cijena')}}&euro;</th>
                </tr>
            </tfoot>
        </table>
        {{ $posts->links()}}
        @else
            <p>Trenutno nema unosa.</p>
        @endif
    </div>
@endsection

我在堆栈溢出中从过去的问题中找到了一些东西,它正在工作,但我有一个问题,所以

public function index()
{
        $posts = Post::where('user_id', Auth::id())->where('created_at', '>=', \Carbon\Carbon::now()->subDays(10))->get();
        return view('home')->with('posts', $posts);
}

当我添加此 -&gt;where('created_at', '&gt;=', \Carbon\Carbon::now()-&gt;subDays(10))-&gt;get(); 时,它会显示过去 10 天的所有帖子,但在那 10 天之后什么都没有,我可以使用它,而是按所有天数排序,而不是设置最长天数吗? 我还将此代码添加到我的价格总和中,它正在工作,但正如我所说的过去 10 天

<tfoot>
                <tr>
                    <th>UKUPAN IZNOS:&nbsp;&nbsp;{{ Auth::user()->posts->where('created_at', '>=', \Carbon\Carbon::now()->subDays(10))->sum('cijena')}}&euro;</th>
                    <th>KARTICA:&nbsp;&nbsp;{{ Auth::user()->posts->where('placanje', 'Kartica')->where('created_at', '>=', \Carbon\Carbon::now()->subDays(10))->sum('cijena')}}&euro;</th>
                    <th>GOTOVINA:&nbsp;&nbsp;{{ Auth::user()->posts->where('placanje', 'Gotovina')->where('created_at', '>=', \Carbon\Carbon::now()->subDays(10))->sum('cijena')}}&euro;</th>
                    <th>VIRMAN:&nbsp;&nbsp;{{ Auth::user()->posts->where('placanje', 'Virman')->where('created_at', '>=', \Carbon\Carbon::now()->subDays(10))->sum('cijena')}}&euro;</th>
                </tr>
            </tfoot>

再次感谢您,如果您能帮我解决这个问题,我将不胜感激。这是我的第一个项目,我对此感到非常高兴。

【问题讨论】:

    标签: laravel sorting date pagination


    【解决方案1】:

    您当前的代码正在做的是获取所有帖子,按created_at 对其进行排序,然后一次显示 3 个。它不关心今天是哪一天,也不关心那天有多少$post

    据我了解,您想要做的是按日期显示。在这种情况下,您的查询应根据日期进行过滤。

    您需要做的是将日期传递给控制器​​并仅获取当天的帖子。这有点棘手。您需要将今天的日期传递给控制器​​。

    在 HTTP GET 方法中,您的 URL 应包含日期。例如,它可以是 http://example.com/index?date=20190716 之类的东西。请注意“日期=20190716”部分。你可以在控制器中得到它。那你就可以通过写作获得当天的帖子,

    $date = new Carbon(request('date'));
    $posts = Post::where('user_id', Auth::id())
            ->whereDate('created_at','=',$date)
            ->orderBy('created_at', 'DESC')
            ->paginate(3); 
    

    现在,它将只获取 2019 年 7 月 16 日之后的帖子。

    这是主要思想。你如何度过这个日期完全取决于你。您可以通过多种方式做到这一点。您可以使用 JS、HTTP GET 方法和 HTTP POST 方法。

    【讨论】:

    • 好的,所以我将此代码添加到我的 HomeController 中,它工作正常!谢谢!现在我可以看到今天发布的所有帖子,我怎样才能看到昨天发布的其他帖子?我怎样才能看到所有这些?
    • 如何通过日期取决于您的项目。在 carbon 中,有一个可以使用的 Carbon::yesterday() 函数。您可以查看碳文档。此外,如果您对 JS 感到满意,那么您可以使用它等等。
    【解决方案2】:

    试试

    public function index()
    {
            $posts = Post::where('user_id', Auth::id())->get();
            return view('home')->with('posts', $posts);
    }
    

    【讨论】:

    • 是的,但是我没有得到我想要的。我需要使用 created_at 顺序进行分页,其中在同一天创建的所有帖子都将位于一个分页链接上,因此在一页上。
    • 所以你想按天分页?
    【解决方案3】:

    试试这个,希望对你有帮助

    
    public function index()
    {
            $dateFromUrl = \Carbon\Carbon::createFromFormat('d/m/Y', request()->date);
    
            $posts = Post::where('user_id', Auth::id())->where('created_at',$dateFromUrl)->orderBy('created_at', 'DESC')
            ->get();
    
            $sum = 0;
            foreach($posts as $post){
               $sum+=$post->price;
            }
    
    
    
            return view('home', compact("posts","sum"));
    }
    
    

    【讨论】:

    • 当我将它添加到我的代码中时,它首先向我显示 $request undefined variable ,然后我添加 public function index(Request $request) 但随后它向我显示“数据丢失”。你知道什么是问题吗?
    • 这是我的错误,所以我编辑了这个。如果您收到“数据丢失”错误,您必须将“createFromFormat”参数转换为 URL 中的日期
    猜你喜欢
    • 2015-09-18
    • 2014-12-10
    • 2017-04-05
    • 2023-03-10
    • 2014-02-24
    • 1970-01-01
    • 2018-03-18
    • 2013-02-19
    • 2017-08-19
    相关资源
    最近更新 更多