Использование Laravel Eloquent для получения записей из базы данных, где разница двух дат равна значению - PullRequest
0 голосов
/ 18 января 2020

Существует таблица users со столбцом hire_date. Цель состоит в том, чтобы вычислить разницу в годах между hire_date пользователя и текущей датой в запросе.

Я хочу получить записи, в которых разница между hire_date как |1989-10-07 02:06:44| и теперь находится в массив как [6,9,30]

В настоящее время я пробовал это

<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\ServiceAwardYear;
use App\User;
use Carbon\Carbon;

class LongServiceAwardController extends Controller
{

    public function index()
    {

        $records = [9,6];

        foreach($records as $record){

          $employees = User::where(Carbon::parse('hire_date')->diffInYears(Carbon::now()), $record)->get();

     }

}

, но он возвращает ошибку:

message: "DateTime::__construct(): Failed to parse time string (hire_date) at position 0 (h): The timezone could not be found in the database". Как я могу это исправить?

1 Ответ

0 голосов
/ 18 января 2020

Попробуйте использовать Carbon subYears(), чтобы получить дату, и сравните с hire_date, что мы можем использовать date_format для преобразования метки времени в дату:

$dates_ago = collect([15, 30, 35, 40])->map(function($num) {
    return Carbon::now()->subYears($num)->format('Y-m-d');
})->all();

User::whereIn(\DB::raw("date_format(hire_date, '%Y-%m-%d')"), $dates_ago)->get();

Или просто используйте TIMESTAMPDIFF()

User::whereIn(\DB::raw("TIMESTAMPDIFF(YEAR, hire_date, NOW())"), [15, 30, 35, 40])->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...