Laravel-通过created_at进行分页排序

时间:2019-07-16 00:53:16

标签: laravel sorting date pagination

所以我在我的项目中添加了分页功能,我快要完成了,顺便说一句,女巫是我有史以来的第一个项目,而现在我要做的就是通过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);
}

当我添加此->where('created_at', '>=', \Carbon\Carbon::now()->subDays(10))->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>

再次感谢您,如果您能帮助我,我将非常感谢。这是我的第一个项目,对此我感到非常高兴。

3 个答案:

答案 0 :(得分:0)

尝试

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

答案 1 :(得分:0)

您当前的代码正在执行的工作是收集所有帖子,并按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方法。

答案 2 :(得分:0)

也尝试一下,希望对您有帮助


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"));
}