2016-08-19 3 views
1

動作しない「」雄弁を比較し、私は必死にSQL要求を並べ替えしようとしている:日付は、メソッドが

私は日付属性が実際の日付より小さいすべての行を持っていると思います。ここで

は私がやっているものです:

$student = User::find($id)->student; 
$extras = $student->extras->where('find', 1) 
          ->where('date', '<', Carbon::now()->toDateString()); 

それは空のコレクションを返します。 $student->extras->where('find', 1)戻り、このため、それは奇妙だ:私が間違ってやっている

2016-08-19 

任意のアイデア:

Collection {#229 ▼ 
    #items: array:1 [▼ 
    0 => Extra {#236 ▼ 
     #fillable: array:10 [▶] 
     #connection: null 
     #table: null 
     #primaryKey: "id" 
     #keyType: "int" 
     #perPage: 15 
     +incrementing: true 
     +timestamps: true 
     #attributes: array:14 [▼ 
     "id" => 4 
     "broadcast" => 0 
     "type" => "Cuisine" 
     "date" => "2016-06-15" 
     "date_time" => "13:00:00" 
     "duration" => 2 
     "salary" => 500 
     "benefits" => "test2" 
     "requirements" => "test2" 
     "informations" => "" 
     "find" => 1 
     "professional_id" => 2 
     "created_at" => "2016-08-19 08:18:59" 
     "updated_at" => "2016-08-19 08:18:59" 
     ] 

あなたが見ることができるように、日付は、この値を返すことCarbon::now()->toDateString()より道少ないのですか?

答えて

1

、プロパティを使用して関係にアクセスしたときに(例えば$student->extras)の結果は既にデータベースから引き出され、あなたがダウンして、データをフィルタリングするIlluminate\Database\Eloquent\Collectionクラスを使用していることに注意してください。 https://github.com/laravel/framework/blob/5.2/src/Illuminate/Support/Collection.php#L282

データベースで結果を照会する場合は、関係のメソッドを使用する必要があります。 $student->extras()->where('find', 1)->where('date', '<', Carbon::now())->get();私はカーボンオブジェクト上で->toDateString()メソッドを呼び出さなかったことにも注意してください。これにより、クエリービルダーはデータベースプラットフォームに必要な正しいフォーマットに日付を変換します。

編集:

あなたが本当にこれを処理するために、コレクションを使用したい場合は、以下の

$extras = $student->extras->filter(function($extra) 
{ 
    return $extra->date->lt(Carbon::now()); 
}); 
+0

ような何かをする必要があると思いますあなたの先生ありがとうございました!ここで( 'find'、1) - > where( 'date'、 '<'、Carbon :: now()) - > get(); $ student-> extras();完全に動作します(get()を使用) –

+0

' - > get()'を見つけて追加しました:) – Wader

0

文字列と日付を比較しようとしています。代わりにこれを試してみてください:

->where('date', '<', Carbon::now());