2016-04-04 10 views
0

私は、Laravel 5と雄弁に問題がある行を返します。 。 代わりに\ DB ::とすると、正しい行が返されます。私が見ることができるLaravel 5雄弁は、日付が0行を返す比較するには、DB ::テーブルには、コールバックが呼ばれ、私が返さ0行が取得私が持っているモデルのwhere句で日付を比較するとき

$callbacks = Auth::user() 
     ->callbacks 
     ->where('datetime', '>', '0000-00-00 00:00:00') 
     ->sortBy('datetime') 
     ->values() 
     ->take(10); 

    $callbacks2 = \DB::table('callbacks') 
     ->where('datetime', '>', Carbon::today()) 
     ->get(); 

唯一の違いは、最初のものは、認証されたユーザのためのすべてのコールバックのLaravelコレクションを返し雄弁関係、を介して行われていることです。

$callbacks式のwhere句を削除した場合は、すべてのコールバックが返されます(古いものはnewcとして、フィルタリングが行われないため)。

私は上記で貼り付けた文字列リテラルの代わりにCarbon\Carbon::today()を試しましたが、同じ結果が得られ、コールバックの1つのデータベースのdatetimeは2016-04-05 15:30:00です。

私は夢中になり、私が考えることができるすべてを試しています。私は実際には、ユーザーのためにコールバックを完全に抽出する必要はありません。日には、ビューに。

私はちょうど:)

任意の提案があるが、それをクリーンアップするためにチェーンのほとんどが除去された、私はどこに私が探している日の翌日から行を避けるために別の操作を行う必要があることを知っています大歓迎です!

答えて

1

を呼び出すことによって実行されているかどうかのクエリ見ることができますが、コレクションが返され、できるだけ早くあなたが->callbacksを使用して、示されました。トリックは、クエリを終了するまでビルダーとしてこれを保持することです。

$callbacks = Auth::user()->callbacks()->where('datetime', '>', '0000-00-00 00:00:00')->orderBy('datetime')->take(10)->get(); 

はあなたにも Builderクラスに分類する正しい方法です orderBysortByを変更する必要がありますのでご注意ください。

2

Auth::user()->callbacksはコレクションですので、あなたはどこコレクション内のアイテムのセットに呼びかけています。したがって、答えはDB内のデータに依存しますが、これらは同じクエリを生成しません。

私はDB::によって返された行が現在のユーザーにrealtedされていないと仮定します。

あなたはOkneloperとして

DB::enableQueryLog() // before the queried

dd(DB::getQueryLog() // after the queries have been run

+0

現在、DBは:: 2つのコールバック(表であり、すべてを)見つけ、そのうちの一つは、現在のユーザーに関連している、だから、DB ::データは、認証の上に別のユーザーからわずか1コールバックです。 :ユーザー() - >コールバックデータ – Ronin

+0

APIを見てみると、 'Collection'の'メソッドは次の場合に基づいて一致しようとしているWHERE'キー、互いに等しい値。それより大きいか小さいかのサポートはありません。 https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Collection.html 'where'の代わりに' filter'メソッドを使用する必要があります。 – user3158900

+0

@ user3158900それは大したことかもしれません!私はいくつかのテストを行って行く! – Ronin

関連する問題