拉拉韦尔(Laravel),按两个日期过滤。出错了

时间:2018-11-06 15:41:50

标签: laravel

修改

我试图两次获取数据,所以我用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。非法的运算符和值组合。

4 个答案:

答案 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();