按日期搜索创建学生Laravel


Search by date_created the students Laravel

我想以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,在他的回答中也可以使用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的答案。

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

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