Laravel, фильтр по двум датам. Получил ошибку - PullRequest
0 голосов
/ 06 ноября 2018

Редактировать

Я пытаюсь получить данные два раза, поэтому я написал этот код на 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 голосов
/ 07 ноября 2018

Формат даты по умолчанию в MySQL - ГГГГ-ММ-ДД.

Строка даты должна быть преобразована в "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();
0 голосов
/ 06 ноября 2018

Получите данные запроса, установите их в переменные и установите правильный формат (я использую 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();
}
0 голосов
/ 06 ноября 2018

Вы ошиблись, когда использовали функцию date, тогда вторым аргументом является отметка времени. Это должно работать:

$date1 = date("d-m-Y", strtotime(Input::get('date1')));
$date2 = date("d-m-Y", strtotime(Input::get('date2')));
0 голосов
/ 06 ноября 2018

Используйте двойное 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...