修改
我试图两次获取数据,所以我用Laravel编写了这段代码。
控制器
use Illuminate\Support\Facades\Input;
public function manage()
{
$date1 = date("d-m-Y", Input::get('date1'));
$date2 = date("d-m-Y", Input::get('date2'));
$filtre = DB::table('rinvoices')->whereBetween('updated_at', [$date1, $date2])->get();
刀片文件
<input type="date" name="date1" id="date1" value="01-11-2018"/>
<input type="date" name="date2" id="date2" value="05-11-2018" />
<table>
<tbody>
@foreach($filtre as $f)
<tr>
<td>{{$f->coderinvoice}} </td>
</tr>
@endforeach
</tbody>
</table>
错误:
InvalidArgumentException。非法的运算符和值组合。
答案 0 :(得分:2)
使用双where
子句:
$filtre = DB::table('rinvoices')
->where('updated_at','>',$date1)
->where('updated_at','<',$date2)
->get();
或者您可以简单地使用whereBetween
:
$filtre = DB::table('rinvoices')
->whereBetween('updated_at', [$date1, $date2])
->get();
答案 1 :(得分:0)
检索请求数据,将其设置为变量并设置正确的格式(我使用Carbon \ Carbon来使用Carbon)。您的问题是您的日期变量未设置,因此它们默认启动Unix时间。如果您从POST表单请求中收集请求数据,则现在应该可以访问它。
public function manage(Request $request)
{
$date1 = ($request->date1)->format('Y-m-d');
$date2 = ($request->date2)->format('Y-m-d');
$filtre = DB::table('rinvoices')->whereBetween('updated_at', [$date1, $date2])->get();
}
但是,如果要创建硬编码日期,则最好将其添加到控制器中。
public function manage()
{
$date1 = "2018-11-01";
$date2 = "2018-11-05";
$filtre = DB::table('rinvoices')->whereBetween('updated_at', [$date1, $date2])->get();
}
答案 2 :(得分:0)
使用date
函数时您的方法错误,则第二个参数是时间戳。
这应该起作用:
$date1 = date("d-m-Y", strtotime(Input::get('date1')));
$date2 = date("d-m-Y", strtotime(Input::get('date2')));
答案 3 :(得分:0)
MySQL的默认DATE格式为YYYY-MM-DD。
在查询之前,日期字符串应转换为“ Y-m-d”。
$date1 = date('Y-m-d', strtotime(Input::get('date1'), 'd-m-Y'));
$date2 = date('Y-m-d', strtotime(Input::get('date2'), 'd-m-Y'));
$filtre = DB::table('rinvoices')
->whereBetween('updated_at', [$date1, $date2])
->get();