按日期搜索_创建学生Laravel

时间:2016-03-30 15:39:08

标签: php laravel search input

我想搜索"学生" 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日到今天获得。

3 个答案:

答案 0 :(得分:2)

你快到了;将'<='添加到您的位置

if(Input::has('date_created')){
        $date = Input::get('date_created');
        $builder->select('*')
            ->where('Home_Students.dateCreated','<=', $date)
            ->get();
    }

编辑感谢@TimLewis,他的答案中也可以使用whereDatewhereBetween

关于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();
        }

要完全理解代码,请阅读评论和接受的(或其他)答案!