我想以laravel 4.2中输入的形式,按"dateCreated"搜索"Students"表,直到今天。
这是我迄今为止写的代码。我不知道如何查询这个,我得到了一个错误。
查看刀片:
<div class="form-group">
{{ Form::label('date_created','...') }}
<div class="input-group date">
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
{{ Form::input('date_created','date_created',null,['class'=>'form-control datepicker','data-date-format' => 'mm/dd/yy']) }}
</div>
</div>
控制器
public function search(){
$builder = User::query();.....
if(Input::has('date_created')){
$date = Input::get('date_created');
$builder->select('*')
->where('Home_Students.dateCreated',$date)
->get();
}
$users = $builder->orderBy('home_lastname')->paginate(50);
return View::make('user.show')->with(array('users' => $users));
} //end function
我得到的错误
nvarchar数据类型转换为datetime数据类型导致值超出范围
存储到表中的日期具有以下形式:
2010年11月10日10:54:077
总之,我想忽略时间,只获取创建的学生,例如,从2015年7月3日到今天。
我认为您在这次搜索中遗漏了一些逻辑。如果希望日期介于给定日期和今天之间,则需要在where()
子句中反映这一点,或者使用Laravel的whereBetween()
函数。此外,我会将您的日期格式化为与数据库中存储的格式相同的格式,所以请尝试以下操作:
if(Input::has('date_created')){
$date = date("Y-m-d", strtotime(Input::get('date_created')));
$builder->select('*')
->whereBetween('Home_Students.dateCreated',[$date, date("Y-m-d")])
->get();
}
您就快到了;将'<='
添加到您的where
if(Input::has('date_created')){
$date = Input::get('date_created');
$builder->select('*')
->where('Home_Students.dateCreated','<=', $date)
->get();
}
EDIT感谢@TimLewis,在他的回答中也可以使用whereDate
和whereBetween
。
关于whereDate
,可以这样写
if(Input::has('date_created')){
$date = Input::get('date_created');
$builder->select('*')
->whereDate('Home_Students.dateCreated','<=', $date)
->get();
}
记住,要有与数据库日期标准相关的正确日期格式,例如:
$date = date("Y-m-d", strtotime(Input::get('date_created')));
顺便说一句,在我的测试中,我已经测试过了,我已经通过了一个字符串日期格式,比如:
$date = '2015-07-03';
它也起到了作用。
这两种方法都经过了测试,并在Laravel中运行,包括@TimLewis的答案。
由于@maytham-ɐɥʇʎ''592ɯ和@Tim Lewis,虽然已经有了一个公认的答案,但我会在代码上发布我的进度。
我所做的是从2个日期选择器中提供3个选项,以按创建的日期搜索用户。
1)从日期(例如2016-2-13)到今天(用户只填写第一个日期选择,第二个为空)。
2)在两个日期之间(例如2016-2-13)直到(例如2016-3-20)(用户填写两个日期选择器)。
3)从开始到用户给出的日期(例如2016-2-13)(用户只填写第二个日期选择器)。
这是代码,我希望这能帮助未来的人:
if(Input::has('date_created_from')) {
$date = date("Y-m-d", strtotime(Input::get('date_created_from')));
$builder->select('*')
->whereBetween('Home_Students.dateCreated', [$date, date("Y-m-d")])
->get();
}
elseif(Input::has('date_created_from','date_created_untill')){
$date = date("Y-m-d", strtotime(Input::get('date_created_from')));
$date2 = date("Y-m-d", strtotime(Input::get('date_created_untill')));
$builder->select('*')
->whereBetween('Home_Students.dateCreated', [$date,$date2])
->get();
}
elseif(Input::has('date_created_untill')){
$date2 = date("Y-m-d", strtotime(Input::get('date_created_untill')));
$date = date("Y-m-d", strtotime(Input::get('date_created_from')));
$builder->select('*')
->whereBetween('Home_Students.dateCreated',[$date,$date2])
->get();
}
要完全理解代码,请阅读注释和接受的(或其他)答案!