2016-04-19 11 views
1

私はLaravel 5.2を使用しています。Laravelは月と年のレコードを取得します

私のように、データベーステーブルschedulesを持っている:今

id name  start_date end_date 
1  AAAAA 2016-01-01 2016-12-31 
2  BBBBB 2016-02-01 2016-03-31 
3  CCCCC 2016-04-01 2016-06-12 
4  DDDDD 2016-04-18 2016-07-15 
5  EEEEE 2016-03-15 2016-04-14 
6  FFFFF 2016-05-01 2016-08-26 

、私はresides in current monthすなわちApril-2016あるスケジュールのレコードを取得したいです。結果は

id name  start_date end_date 
1  AAAAA 2016-01-01 2016-12-31 
3  CCCCC 2016-04-01 2016-06-12 
4  DDDDD 2016-04-18 2016-07-15 
5  EEEEE 2016-03-15 2016-04-14 

私が使用してみました、

Schedule::whereDate('start_date', '<=', '2016-04-01') 
->whereDate('end_date', '>=', '2016-04-30') 
->get(); 

でなければなりません。しかし、それはid14でレコードを除外します。

どうすればこの問題を解決できますか?両方の包括&の重複日付範囲の

+0

なぜあなたは私たちがSTART_DATEとEND_DATEにタイムスタンプを保存する場合、このようにしてみてください、とクエリの間では使用しないでください。 –

+0

それは1と4を除いていますか? 4と5ではない? – fusion3k

答えて

2

このコードは、あなたのcriteriasを渡します。それを試してみてください。

DB::select(DB::raw("SELECT * FROM schedules WHERE start_date <= '2016-04-30' AND end_date >= '2016-04-01'")) 

または雄弁で:

Schedule::where('start_date','<=', '2016-04-30')->where('end_date','>=', '2016-04-01')->get(); 
1

チェック:

Schedule::where(function($q) use($start_date,$end_date) { 
    //Inclusive Date Range 
    return $q->orWhere(function($q) use($start_date,$end_date) { 
     return $q->where('start_date','>=',$start_date) 
      ->where('end_date','<=',$end_date); 
    }) 
    //Overlapping Date Range 
    ->orWhere(function($q) use($start_date,$end_date) { 
     return $q->where('start_date','<=',$start_date) 
      ->where('end_date','>=',$end_date); 
    }); 
}) 
->get(); 
関連する問題