Utknąłem w zapytaniu laravel. Proszę spojrzeć i dać mi jakąś wskazówkę lub rozwiązanie. Dziękuję Ci.

To jest mój problem.

Teraz: 2019-12-20.

Mam model People z taką tabelą:

[
  {
    id: 1,
    type: 'employee',
    created_at: '2019-11-20',
  },
  {
    id: 2,
    type: 'employee',
    created_at: '2019-09-20',
  },
  {
    id: 3,
    type: 'employee',
    created_at: '2019-11-25',
  },
  {
    id: 4,
    type: 'ceo',
    created_at: '2019-11-20',
  },
  {
    id: 5,
    type: 'cfo',
    created_at: '2019-11-27',
  },
]

Za pracowników muszę płacić co miesiąc, dokładnie w 30 dniu (okres 30 dni).

Więc moim pomysłem jest zdobycie rekordów:

  • mają typ employee.
  • (teraz - created_at)% 30 = 0.

A to moje dotychczasowe kody:

$people = People::where('type', 'employee')->get();

foreach ($people as $key => $person) {
  $diff_in_days = Carbon::parse($person->created_at)->diffInDays(Carbon::now()) % 30;

  if ($diff_in_days === 0) {
    // paid for this person.
  }
}

I otrzymałem wynik:

[
  {
    id: 1,
    type: 'employee',
    created_at: '2019-11-20',
  },
  {
    id: 2,
    type: 'employee',
    created_at: '2019-09-20',
  },
]

Zastanawiam się, że istnieje sposób na uzyskanie rekordów z dopasowaniem created_at w pierwszym zapytaniu.

Myślę, że może tak będzie wyglądać.

$people = People::where('type', 'employee')
                -> // some codes to compare: (now - created) % 30 === 0
                ->get();

foreach ($people as $key => $person) {
  // paid for this person.
}

Dziękuje wszystkim.

2
blackieer 20 grudzień 2019, 07:07

2 odpowiedzi

Możesz spróbować -

->whereRaw('DATEDIFF(now(), created_at) = 30')

DATEDIFF ()

W przypadku innych warunków zgodnie z komentarzem -

DATEDIFF(NOW(), created_at) > 60

DATEDIFF(NOW(), created_at) > 90

DATEDIFF(NOW(), created_at) > 60 AND DATEDIFF(NOW(), created_at) <= 90
3
Sougata Bose 20 grudzień 2019, 08:45
1
Dziękuję Ci. To dla mnie ważna wskazówka. Zaktualizowałem moje pytanie, przepraszam za mój błąd. Jak mogę utworzyć employee 60 dni temu, 90 dni temu...
 – 
blackieer
20 grudzień 2019, 08:42
Może być DATEDIFF(NOW(), created_at) > 60 lub DATEDIFF(NOW(), created_at) > 90 lub DATEDIFF(NOW(), created_at) > 60 AND DATEDIFF(NOW(), created_at) <= 90
 – 
Sougata Bose
20 grudzień 2019, 08:44
Bardzo dziękuję. Mam rozwiązanie. ->whereRaw('DATEDIFF(NOW(), created_at) % 30 = 0'). Uratowałeś mi cały dzień.
 – 
blackieer
20 grudzień 2019, 08:50

Coś takiego może być:

$people = People::where('type', 'employee')
                ->whereRaw('DATEDIFF(DAY, GETDATE(), created_at) = 30')
                ->get();
1
Osama Khalid 20 grudzień 2019, 08:42
1
Dziękuję Ci. Mam pytanie. W klauzuli where nie pobrałem jeszcze $person->created_at. Czy się mylę?
 – 
blackieer
20 grudzień 2019, 08:31
Wprowadziłem zmiany!
 – 
Osama Khalid
20 grudzień 2019, 08:46
1
Bardzo dziękuję. Mam rozwiązanie. ->whereRaw('DATEDIFF(NOW(), created_at) % 30 = 0'). Uratowaliście mi cały dzień.
 – 
blackieer
20 grudzień 2019, 08:51