获得最多两天的前10名常见表格?

时间:2017-01-12 02:27:48

标签: php laravel php-carbon

这是我的mySql表“listazel​​ja”: http://prntscr.com/duj2tf

我希望在我的控制器中使用此代码获得标题中提到的内容:

<?php

namespace App\Http\Controllers;

use App\ListaZelja;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class GlazbeniController extends Controller
{
    public function listazelja(){

        $sada = Carbon::now();

        $listaZelja = DB::table('listazelja')->orderBy('zapis_count','desc')->select(DB::raw('count(*) as zapis_count'),'zapis_id')
            ->groupBy('zapis_id')
            ->having($sada->diffInHours(Carbon::createFromFormat('Y-m-d H-m-s', 'created_at')) <= 48)
            ->take(10)->get();

        return view('pregledajlistuzelja',compact('listaZelja'));
    }
}

这是我得到的错误:

Carbon.php第425行中的

InvalidArgumentException: 无法找到四位数的年份 缺少数据

我知道问题在于这行代码:  ->having($sada->diffInHours(Carbon::createFromFormat('Y-m-d H-m-s', 'created_at')) <= 48)

所以我应该怎么做才能让它发挥作用。

P.S。 mySql中的created_at类型为:timestamp

2 个答案:

答案 0 :(得分:0)

试试这个

$maxhours = Carbon::now()->subHours(48)->toDateTimeString();
$listaZelja = DB::table('listazelja')
            ->orderBy('zapis_count','desc')
            ->select(DB::raw('count(*) as zapis_count'),'zapis_id')
            ->groupBy('zapis_id')
            ->having('created_at' <= maxhours)
            ->take(10)->get();

答案 1 :(得分:0)

我认为你的查询如下:

$twoDaysOldDate = date("Y-m-d",strtotime('now -48 hours'));
$listaZelja = DB::table('listazelja')
           ->orderBy('zapis_count','desc')
           ->select(DB::raw('count(*) as zapis_count'),'zapis_id')
           ->groupBy('zapis_id')
           ->whereDate('created_at', '<=', $twoDaysOldDate)
           ->take(10)
           ->get();

希望这对你有用!