Сравнение поля даты базы данных с датой - PullRequest
0 голосов
/ 08 мая 2019

Сравнить дату базы данных с датой

Я хочу проверить поле даты базы данных меньше 5 дней или нет

Я пытался с классом Carbon, который выводит значения в целых числах, а база данных MySQL возвращает значение в строке или объекте

$ticket = Tickets::select('created_at')->where('id','=',$id)->get();

Я хочу проверить, если этот результат даты меньше 5 дней или нет например, если текущая дата результата - 01-05-2019, сообщение должно быть «билет старше 5 дней»

Ответы [ 3 ]

0 голосов
/ 08 мая 2019

Я думаю, что вы можете просто изменить текущую дату на 5 дней меньше и сравнить ее

  $date = new DateTime;
  $date->modify('-5 days');
  $formatted_date = $date->format('Y-m-d H:i:s');

  $ticket = Tickets::where('created_at', $formatted_date)->where('id','=',$id)->first();

, если вы хотите игнорировать отметку времени и сравнивать только дату, которую вам может потребоваться

 $formatted_date = $date->format('Y-m-d');
 $ticket = Tickets::where(Date('created_at'), $formatted_date)->where('id','=',$id)->first();

Я не проверял его, но кажется, что этот код должен работать для вас.

0 голосов
/ 08 мая 2019

Я создал область действия модели

Подробнее об областях применения:

Итак, добавьте этот метод области действия к вашей модели, который будет Ticket

   /**
     * Scope a query to only include the last n days records
     *
     * @param  \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeWhereDateOccurs($query, $fieldName, $upToDate,$noOfDays = 5)
    {
        $startFrom = \Illuminate\Support\Carbon::parse($upToDate)->toDateTimeString();
        $endUpTo =  \Illuminate\Support\Carbon::createFromDate( $startFrom)->subDays( $noOfDays)->toDateTimeString();

        return $query->whereDate($fieldName, '>=', $startFrom)->whereDate($fieldName, '<=', $endUpTo);
    }

Итак, мы закончили с методом

Теперь в вашем контроллере

$ticket = Tickets::where('id','=',$id)
                  ->WhereDateOccurs( 'created_at', '01-05-2019',5)
                  ->get();

и вот журнал сгенерированных запросов

SELECT * 
FROM   `tickets` 
WHERE  Date(`created_at`) >= ? 
       AND Date(`created_at`) <= ? 
       AND `id` = ? 
       AND `tickets`.`deleted_at` IS NULL 

, и я использую программные средства удаления, поэтому Удален_С IS NULL добавлен ко всем построителям запросов.

0 голосов
/ 08 мая 2019

Это должно работать для вас.Это вернет разницу дат с сегодняшнего дня.

$ticket = Tickets::selectRaw('abs(datediff(created_at,"'.\Carbon\Carbon::now().'")) as day')->where('id','=',$id)->first();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...