Получить все строки за последние 3 года (Laravel + Eloquent) - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь получить все возможные строки в модели, однако это должны быть последние 3 возможных года, как если бы у меня был результат в 2020 году, но ничего не было в 2019 году, тогда он должен искать в 2018 году. , 2017, но если у меня был результат в 2019 году, то он должен искать только результаты в 2018.

Я уже освоил whereBetween, однако я не получаю никаких результатов из базы данных, используя следующий запрос:

$year = $request->all();
$fromDate = $year['yearFrom'];
$toDate = $year['yearTo'];

return Tipico::whereBetween(
    DB::raw('date(created_at)'), [$fromDate, $toDate]
)
    ->get();

Как вы можете видеть, я получаю год от метода записи, который дает мне начальный и конечный sh год, однако он не проверяет информацию, которую я ищу Ибо, как лучше это сделать?

1 Ответ

1 голос
/ 20 марта 2020

Используйте Carbon для создания ваших дат:

$fromDate = Carbon::createFromDate($year['yearFrom'], 1, 1)->startOfDay();
$toDate = Carbon::createFromDate($year['yearTo'], 12, 31)->endOfDay();

Тогда в вашем запросе created_at уже является датой, поэтому:

return Tipico::whereBetween('created_at', [$fromDate, $toDate])->get();

Не забудьте включить Carbon в ваш класс вверху:

use Illuminate\Support\Carbon;

или только

use Carbon\Carbon;

Чтобы получить данные за последние 3 года, можно было бы выполнить запрос, чтобы узнать, за какие годы у вас есть данные. нужно.

Итак, давайте используем yearTo в качестве ссылки на его и выберем первые 3 года с данными:

$years = Tipico::select(\DB::raw('YEAR(created_at) as years'))
               ->where('created_at', '<=', $toDate)
               ->distinct()
               ->orderByRaw('YEAR(created_at) DESC')
               ->limit(3)
               ->get();

Теперь в $years у вас будет 3 года. Теперь вы можете запустить запрос с этими годами в качестве параметра:

return Tipico::whereIn(\DB::raw('YEAR(created_at)'), $years)->get();

* Не уверен, что вы можете передать $years напрямую или вам нужно преобразовать в массив. Посмотри.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...