我想搜索"学生" table by" dateCreated"直到今天,在laravel 4.2中输入一个表格。
这是我到目前为止编写的代码。我不知道怎么查询这个,我得到一个错误。
查看刀片:
<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数据类型转换为日期时间数据类型会导致超出范围的值
存储在表格中的日期具有以下形式:
2010-11-10 10:54:07.077
总而言之,我想忽略时间,只是让学生从2015年3月3日到今天获得。
答案 0 :(得分:2)
你快到了;将'<='
添加到您的位置
if(Input::has('date_created')){
$date = Input::get('date_created');
$builder->select('*')
->where('Home_Students.dateCreated','<=', $date)
->get();
}
编辑感谢@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的答案。
答案 1 :(得分:2)
我认为你在这次搜索中缺少一些逻辑。如果您希望日期在之间的某个日期和今天,则需要在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();
}
答案 2 :(得分:1)
虽然@ maytham-ɯɐɥʇʎɐɯ和@Tim Lewis已经接受了答案,但我会在代码上发布我的进展。
我所做的是从2个datepickers 3选项中提供以date_created搜索用户。
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();
}
要完全理解代码,请阅读评论和接受的(或其他)答案!