2017-01-12 7 views
1

これは私のMySQLのテーブル「listazel​​ja」:私は私のコントローラでこのコードをタイトルに記載されているものを取得したい http://prntscr.com/duj2tf最大2日間のトップ10のテーブルエントリーを取得しますか?

<?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')); 
    } 
} 

これは私が取得しています誤りがあります4桁の年が

を逃す データを見つけることができませんでした :425 Carbon.phpラインの

InvalidArgumentException

私はその問題のコード行を知っている: ->having($sada->diffInHours(Carbon::createFromFormat('Y-m-d H-m-s', 'created_at')) <= 48)

ので、私はそれを動作させるために何をすべきか。

P.S. MySQLでのcreated_atは型である:タイムスタンプ

+0

私は 'created_at'は$ sadaの中で呼び出すので、文字列として渡されていると思います。 PS。これが私がフレームワークを嫌う理由です。 – fie

+0

Mysql NOW()関数とINTERVALまたはTiMEDIFFを使用してみてください... – ratmalwer

+0

'Carbon :: createFromFormat($ format、$ time、$ tz);'の2番目の引数は '$ time'でなければなりませんが、文字列'created_at'の値で置き換えます。 Carbon :: createFromFormat( 'Y-m-d H'、 '1975-05-21 22') - > toDateTimeString(); // 1975-05-21 22:00:00' – Gayan

答えて

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(); 

希望あなたのためにこの作品!

+0

タイ、これは動作するようです! – pobro123

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(); 
+0

maxhoursで「$」が欠けていることを除いて、他には何もしません。 :) – pobro123

関連する問題