2017-06-10 11 views
0

私はPHPのlaravelからこのようないくつかのデータを抽出しようとしています:PHP Laravel/Oracleはタイムスタンプを比較します。どうやって?

$x = Carbon::now()->timestamp; 
    $data=Notifications->where('happened_at','>',$x) 
           ->where('id_user',Auth::user()->getAuthIdentifier()); 

私はOracleデータベースでは、このSQL文を入力した場合、直接それが完璧に動作します:

select * from notifications where happened_at > '10-06-2017 00:11:12,000000000'; 

^これは、正しい返しますしかし、私のPHPのlaravelで良い行を返しません(データベースからすべての行を返します)

後編集:ここで問題は、私はちょうど私のDB( 'happened_at' )を現在の時刻と比較します。 ..私はどのようにわからない

答えて

0

モデルコールコードを分解しましょう。

// first, you retrieve all notifications and assign them to $data 
$data = Notifications::all() 

// then, you try to start a new query 
->where('happened_at','>',$x) 

// then, you continue the new query 
->where('id_user',Auth::user()->getAuthIdentifier()) 

// and finally, you finish the call 
; 

基本的に、最初はすべての行がすでに取得されているため、実行しないクエリの作成を開始しようとします。 (でも、できません。all()はコレクションを返します。)

all()を削除し、最後に->get()とすると正常に動作します。 (私はOracleのタイムスタンプについては何も知らないが)

+0

オペレータ '>'を '<'に変更すると0行が得られるので、これも問題ではないと私は考えている別のものがあり、うまくいきました。 – Gimv13

+0

これは 'where()'もコレクションメソッド(https://laravel.com/docs/5.4/collections#method-where)であるためです。それよりも小さい値を検索すると_everything_ PHPによって。通常、このようにクエリを実行する場合は、毎回同じです。データベースからすべてを取得し、コレクションでフィルタリングを処理させるようにします。非常に効率的な方法ではありません。 :) –

+0

ええ、ありがとう、私はそれをあなたのやり方に切り替えました、そして今、私はどこで(比較が悪いの)エラーが発生したことに気付きました。 – Gimv13

関連する問題