Задать вопрос
Ответы пользователя по тегу Laravel
  • Можно ли сделать логирование всех mysql запросов чтоб подневно создавались файлы логов?

    Alixx
    @Alixx
    Можно, я сделала следующим образом, может кому пригодится:
    class SqlLoggingServiceProvider extends ServiceProvider
    {
        public function boot()
        {
            if (config("database.connections." . env('DB_CONNECTION') . ".logging")) {
                DB::listen(function ($query) {
                    Log::channel('sql') // название канала, указанное в конфиге
                        ->info($query->sql, ['time' => $query->time, 'bindings' => $query->bindings]);
                });
            }
        }
        //..
    }

    В config/database.php в нужном подключении (у меня pgsql) надо добавить строки
    'connections' => [
        //...
        'pgsql' => [
            //..
            'logging' => true,
            'channel' => 'sql', // название канала
        ]
    ],

    В config/logging.php добавляем данные о канале sql
    'channels' => [
            //..
            'sql' => [
                'driver' => 'daily',
                'path' => storage_path('sql/laravel.log'),
                'level' => 'debug',
                'days' => 7,
            ],
    Ответ написан
    Комментировать
  • Как php (в частности на Laravel) сайты осуществляют события при наступлении нужных даты/времени?

    Alixx
    @Alixx Автор вопроса
    Всем спасибо за ответы.) Всё получилось с планировщиком задач в ларе и винде. Может кому пригодится, опишу подробней:
    В бд создать таблицу с задачами (id, date_end с индексом - не позже этого времени нужно выполнить эту задачу, type - тип задачи, и пр.).
    В app/Console/Kernel.php создала artisan команду, вызывается ежеминутно
    ...
     protected $commands = [
            'App\Console\Commands\DateTasksUsers'
        ];
     protected function schedule(Schedule $schedule)
        {
            $schedule->command('date_tasks:users')->everyMinute();
        }
    ...

    В app/Console/Commands/DateTasksUsers.php - файл для команды. В ней проходим таблицу задач, ищем те, время которых уже подошло. Для каждой полученной задачи вызываем соответствующую функцию.
    ...
        protected $signature = 'date_tasks:users';
        ...  
        public function handle()
        {
            $tasks = TaskUser::where('date_end', '<=', time())
                ->get(); 
            if (!is_null($tasks)) {
                foreach($tasks as $task)
                {
                    if ($task->type == 1)
                        User::task_change($task); // там уже проверяем данные, обновляем данные в бд, уведомление кидаем 
                                        // юзеру и т.д. Там же в конце удаляем эту задачу.
                    elseif ($task->type == 2)
                        Item::task_upgrade($task);
                    // дальше так же добавлять новые типы задач и вызов соответствующих ф-й для них
                }
            }
        }

    Настроить планировщик винды (у меня 10ка) как в статье (там для xampp как раз показано), которую скинул Barmunk.
    Вот и все манипуляции)
    Смущает только то, что задачи выполняются последовательно, а надо бы запустить их все разом параллельно, т.е. в несколько процессов.
    Ответ написан
    Комментировать