Laravel Eloquent - Specifi c Дата фильтрации - PullRequest
0 голосов
/ 09 января 2020

У меня есть приложение Laravel, которое отправляет напоминания в определенные c дни до tenancy_start_date. По существу, каждые 3 дня, затем 2 дня, затем ежедневно ([30, 27, 24, 21, 19, 17, 15, 13, 11, 9, 8, 7, 6, 5]). Есть ли более аккуратный способ закодировать это? :

User::where('active', 1)
            ->where('setup_status', '<', 9)
            ->where(function ($q) {
                $q->where('tenancy_start_date', '=', now()->addDays(31)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(28)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(25)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(22)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(20)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(18)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(16)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(14)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(12)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(10)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(9)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(8)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(7)->toDateString())
                ->orWhere('tenancy_start_date', '=', now()->addDays(5)->toDateString());
            })->get();

1 Ответ

1 голос
/ 09 января 2020

Какая у вас база данных? Вы можете использовать определенные c функциональность разницы дат. Например, в MySQL вы можете попробовать это:

where(DB::raw('DATEDIFF(tenancy_start_date, now()) in 
              (30, 27, 24, 21, 19, 17, 15, 13, 11, 9, 8, 7, 6, 5)')

В PostgreSQL вы также используете DATEDIFF, но вы должны указать day в качестве параметра. В других движках базы данных вы можете найти аналогичное решение

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