PHP Telegram bot + Laravel разработка с нуля `Урок – 9`
Статья на Яндекс Дзен, подписывайтесь!
В этом уроке мы создадим табличку для пользователей телеграм через миграции ларавель, куда будем сохранять различную информацию, с которой сможем в дальнейшем работать.
Как сделать мультиязычный телеграм бот?
Очевидно для реализации такого функционала потребуется как минимум куда-нибудь записывать выбранный пользователем язык.
Это можно реализовать несколькими способами:
- Отдельным таблицами telegram_users + languages и их связкой через таблицу telegram_users_languages
- Одной таблицей с пользователями telegram_users и колонкой выбранного языка.
Я пойду по 2му пути, он более понятный да и нет смысла делать отдельную таблицу для нескольких языков.
В Laravel для работы с таблицами используют подход миграций, это некий контроль версий для бд. Чтобы создать миграцию существует команда php artisan make:migration migration_name Она имеет методы:
- up – который запускается вместе с запуском миграций командой php artisan migrate
- down – который испольняется при запуске php artisan migrate:rollback и откатывает внесенные изменения назад.
На официальном сайте есть подробная документация, а мы перейдем к делу.
Создание базы данных для пользователей телеграм через модель с миграцией Laravel.
В Laravel отлично реализована ORM-модель, которая позволяет при помощи Eloquent работать с таблицами баз данных через модель.
Вкратце у вы хотите создать таблицу cars с машинами, значит вы создаете модель Car, которая будет работать с таблицей cars. Подробнее можно почитать в официальной документации.
Создаем новую модель TelegramUser и сразу создаем к ней миграцию при помощи тега -m:
php artisan make:model TelegramUser -m
Получаем в ответ уведомления о том, что наша модель и миграция созданы и проверяем что они действительно создались в папках Models и Migrations соответственно.
Зайдем в класс нашей модели и добавим пару строчек.
$table – таблица, с которой будет работать модель.
$guarded – позволяет передать массив с колонками, которые нельзя заполнять, как некая защита, если заполнять можно все, поставим false
Теперь заглянем в миграцию и посмотрим из чего она состоит. Подробнее о типах колонок можно почитать в официальной доке. Я внес небольшие изменения для наглядности :
- Название создаваемой таблицы
- Тип колонки(строка, число, id, boolean) и т.д.
- Название колонки
- Доп свойство, например nullable, может ли быть значение null
Дальше нужно придумать какие колонки нам пригоядся и дописать их. На самом деле в документации Telegram Bot API указаны все поля, которые могут прийти, поэтому останется добавить выбранный язык и статус:
Получаем следующий список колонок, которые будут вставлены в таблицу telegram_users:
- $table->id(); – идентификатор, который будет автоматически проставляться всем записям
- $table->integer(‘user_id’); – идентификатор пользователя из телеграм
- $table->string(‘username’)->nullable(); – Ник пользователя, его может не быть, поэтому ставим nullable
- $table->string(‘first_name’)->nullable(); – Имя пользователя, так же необязательный параметр, может прийти null
- $table->string(‘last_name’)->nullable(); – Фамилия пользователя, так же необязательный
- $table->string(‘selected_language’)->default(‘ru’); – выбранный пользователем внутри нашего бота язык, который и будет отвечать за многоязычность, по умолчанию пусть будет ru
- $table->string(‘language_code’)->nullable(); – Языковой код пользователя, который пришел с вебхуком. Можно поиграться и выдавать контент сразу на языке пользователя, но раз он может не прийти, я решил от него не зависить, просто сохранить на будущее
- $table->boolean(‘is_premium’)->nullable(); – булевое значение, показывающее есть ли у пользователя премиум подписка
- $table->boolean(‘is_bot’)->nullable(); – булевое значение, показывающее написал нам бот или реальный человек
- $table->string(‘status’)->default(‘active’); – статус пользователя, точнее статус чата с ним, если он вышел или заблокировал бота, нам придет соответствующий вебхук и с этим можно что то придумать
- $table->timestamps(); – ларавелевская функция, которая создает еще две колонки в таблице created_at и updated_at, показывающие дату создания записи и дату её изменения соответственно.
Запуск миграции Laravel
Обратите внимание, список миграций можно посмотреть в папке database->migrations, помимо нашей есть еще несколько, которые создадут несколько дефолтный таблицу
Если наша миграция готова, можно запускать. Чтобы запустить все миграции, которые еще не отработали доступна команда:
php artisan migrate
Если вам нужно запустить конкретную миграцию, не трогая другие, можно написать так, добавив –path=Путь/Название:
php artisan migrate –path=database/migrations/2023_03_29_180253_create_telegram_users_table.php