Получите дату, истекшую через 60 дней, используя Laravel

avatar
saadia
8 августа 2021 в 23:41
55
1
0

Я пытаюсь получить date_fin_contrat, срок действия которого истекает через 60 дней.

Поэтому я использую следующую формулу:

date_fin_contrat-60 <= current_date

Итак, в Laravel я использую следующий код:

$contrats_en_cours = Contrat::where('contrats.actif', 1)
    ->join('projets_castings', 'contrats.id_contrat', '=', 'projets_castings.id_contrat')
    ->leftjoin('projets', 'projets.id_projet', '=', 'projets_castings.id_projet')
    ->leftjoin('castings', 'contrats.id_casting', 'castings.id_casting')
    ->whereDate('contrats.date_fin_contrat', '-', 60, '<=', Carbon::today())
    ->get();

Например: Текущая дата 09-08-2021 и date_fin_contrat 09-10-2021 Я должен получить эту строку.

Но я ничего не получаю, что-то не так с моим запросом?

Если у вас есть идеи, пожалуйста, помогите.

Источник
matiaslauriti
9 августа 2021 в 00:59
0

Прежде всего, пожалуйста, ИЗБЕГАЙТЕ использования большого количества joins, это полностью разрешимо с помощью отношений... например, Contract::where('actif', true)->projets()->castings()->get(). Вам все равно нужно добавить условие where для контракта, но все равно это будет более читабельно.

Ответы (1)

avatar
Muhammad Shariq
9 августа 2021 в 06:52
0

Я не использовал функцию Laravel whereDate, но вы можете сделать это просто

date_fin_contract = "09-10-2021"

$today_date = Carbon::now()->addDays(60)->toDateTimeString();

в предложении where вы можете просто проверить

where('date_fin_contract', '<=', $today_date);

<= срок действия контракта не истек

>= срок действия договора истек

Clément Baconnier
9 августа 2021 в 07:00
1

Я думаю, что это будет больше >, чем >= в отношении просроченных контрактов. В общем, договор действует до последнего дня.

Muhammad Shariq
9 августа 2021 в 07:02
0

Да, если контракт действителен до последнего дня, то >= следует заменить на >