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 odpowiedzi
Możesz spróbować -
->whereRaw('DATEDIFF(now(), created_at) = 30')
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
Coś takiego może być:
$people = People::where('type', 'employee')
->whereRaw('DATEDIFF(DAY, GETDATE(), created_at) = 30')
->get();
where
nie pobrałem jeszcze $person->created_at
. Czy się mylę?
->whereRaw('DATEDIFF(NOW(), created_at) % 30 = 0')
. Uratowaliście mi cały dzień.
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.
employee
60 dni temu, 90 dni temu...DATEDIFF(NOW(), created_at) > 60
lubDATEDIFF(NOW(), created_at) > 90
lubDATEDIFF(NOW(), created_at) > 60 AND DATEDIFF(NOW(), created_at) <= 90
->whereRaw('DATEDIFF(NOW(), created_at) % 30 = 0')
. Uratowałeś mi cały dzień.