我想查询以获取开始日期和结束日期之间, 和start_date& end_date是来自用户的输入,因此我使用类似'%'。
的语法这是我的代码,但没有工作
public function getData()
{
$inputname = Input::get('searchname');
$startdate = Input::get('tglmulai');
$enddate = Input::get('tglsiap');
$name = DB::table('tr_visit')
->join('tm_child','tr_visit.Child_ID','=','tm_child.Child_ID')
->select('tm_child.Child_Name','Bmi_Score')
->where('tm_child.Child_Name', 'LIKE', '%'.$inputname.'%')
->whereBetween('Visit_Date', 'LIKE', '%'.$startdate.'%' and 'LIKE', '%'.$enddate.'%')
->get();
return view('Laporan.Kehadiran.kehadiranview', compact('name'));
}
答案 0 :(得分:2)
请始终使用您想要的方法检查文档中的代码示例。
介于
之间值得注意的是,whereBetween http://laravel.com/docs/4.2/queries#advanced-wheres
我自己没有使用过这种特殊的方法,但它看了一眼,所以我找到了doco并看到了这个:
$users = DB::table('users')
->whereBetween('votes', array(1, 100))->get();
我无法运行您的代码以确定,但似乎这可能对您有用:
public function getData()
{
$inputname = Input::get('searchname');
$startdate = Input::get('tglmulai');
$enddate = Input::get('tglsiap');
$name = DB::table('tr_visit')
->join('tm_child','tr_visit.Child_ID','=','tm_child.Child_ID')
->select('tm_child.Child_Name','Bmi_Score')
->where('tm_child.Child_Name', 'LIKE', '%'.$inputname.'%')
->whereBetween('Visit_Date', array($startdate, $enddate))
->get();
return view('Laporan.Kehadiran.kehadiranview', compact('name'));
}
这假设 - > select()和其他方法没有问题(取出whereBetween并在没有它的情况下确认其工作)。
通配符注意
你确实意识到'%'只是LIKE的通配符。
它与用户输入没有任何关系,只是为了匹配包含'%'之间的子字符串的任何值。
SQL通配符:http://www.w3schools.com/sql/sql_wildcards.asp
SQL之间的DateTime字符串
在这种情况下,您应该在html中使用datepicker或类似的东西,或者确保将输入(您没有指定格式)转换为sql的格式。
SQL Between文档显示以下示例:
SQL之间:http://www.w3schools.com/sql/sql_between.asp
SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;
因此,普通字符串应该可以工作,只需要确定它与数据库的格式相同。
这里有一些(使用直接sql):SQL query to select dates between two dates
如何在html(或客户端js)中实现这种格式是许多方法中的一种,但是有许多易于使用的javascript datepickers,即使不使用jquery或其他库。