所以在我的数据库中,我有一个名为“records
”的表,其中包含大约1k个条目。此表包含“id”,“title
”,“date_finished
”,“category_id
”,“user_id
”等字段。
“date_finished
”默认为0000-00-00 00:00:00
,但用户可以将其更改为当前时间戳。因此,在此表中,大约一半有默认date_finished
,另一半有自定义。
在我的HTML中,我input
type="month"
,其中年份和月份以“2016-10”的格式发送给控制器。
我只需要获得那些具有默认date_finished
属性或date_finished
的条目,其中包含从输入中收到的月份和年份。
在我的控制器的开头,我写了
$record_query = DB::table('records');
然后,我需要一些额外的选项,所以我有两个数组 - $ users和$ categories包含一些id。然后,我做
$record_query = $record_query
->where(function($q) use ($users){ $q->whereIn('records.user_id', $users); })
->orWhere(function($q) use ($categories){
$q->whereIn('records.category_id', $categories);
});
之后我从1k剩下大约700个条目。
以下是问题所在的部分。
要获得满足上述要求的条目,我会
$month = Input::get('month');
$record_query = $record_query->where(function($w) use($month){
$w->where('records.date_finished','0000-00-00 00:00:00')
->orWhere(function($q) use ($month){
$q->where('records.date_finished','!=','0000-00-00 00:00:00')
->whereBetween('records.date_finished',array(date('Y-m-d', strtotime($month)), date('Y-m-d', strtotime($month.'+1 month'))));
});
});
在这次修改之后,我得到了大约300个不符合这些要求的条目。我得到的数组包含一些默认date_finished
和自定义date_finished
的随机条目,这些条目与我从输入发送的条目没有任何共同之处。
当我直接在SQL中运行相同的查询时,我得到了正确的结果。
我哪里错了?
答案 0 :(得分:1)
我认为你需要像
这样的东西$date = Carbon::createFromDate(null, $month, null);
$record_query = $record_query->where(function($w) use($date){
$w->where('records.date_finished','0000-00-00 00:00:00')
->orWhere(function($q) use ($date){
$q->whereBetween('records.date_finished', [$date->toDateString(), $date->addMonth()->toDateString()])));
});
});