Telegram бот на Laravel #2: создание миграций для бота — PROG-TIME

Telegram бот на Laravel #2: создание миграций для бота

26.06.2024
Содержание:

В новом уроке мы с вами добавим таблицы для бота в нашу БД. Таблицы будем создавать используя базовую систему миграций от Laravel.

Мы добавим таблицы для записи информации о статьях и пользователях.

Структура таблиц для бота

Для нашего бота я решил создать следующие таблицы:

  • articles — информация о статьях
  • chapters — главы конституции
  • bot_users — информация о пользователях (пользователи запустившие бота)
  • favorites — информация о статьях из раздела «Избранное»
  • progress_study — информация о статьях со статусом «Прочитано»

Создание файла миграции

Для создания файла миграции, пропишите команду

php artisan make:migrations НазваниеМиграции 

Для своего проекта я создал следующие миграции:

php artisan make:migrations create_articles_table

php artisan make:migrations create_chapters_table

php artisan make:migrations create_bot_users_table

php artisan make:migrations create_progress_study_table

php artisan make:migrations create_favorites_table

Все миграции расположены в директории database/migrations.

Таблица для статей конституции

Поля таблицы:

  • id
  • text (описание статьи)
  • chapter (глава)
  • article (номер статьи)
  • section (раздел)
  • created_at
  • updated_at

Код файла миграции:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->id();
            $table->text('text');
            $table->integer('chapter');
            $table->integer('article');
            $table->integer('section');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('articles');
    }
};

Таблица с пользователями

Поля таблицы:

  • id
  • id_telegram (ID аккаунта в Telegram)
  • firstname (имя пользователя)
  • lastname (фамилия пользователя)
  • username
  • study_status (статус обучения)
  • id_last_message (ID последнего сообщения)
  • created_at
  • updated_at

Код файла миграции:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('bot_users', function (Blueprint $table) {
            $table->id();
            $table->bigInteger('id_telegram');
            $table->string('firstname', 512)->nullable();
            $table->string('lastname', 512)->nullable();
            $table->string('username', 512)->nullable();
            $table->integer('id_last_message')->nullable();
            $table->tinyInteger('study_status')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('bot_users');
    }
};

Таблица с главами конституции

Поля таблицы:

  • id
  • title (заголовок главы)
  • created_at
  • updated_at

Код файла миграции:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('chapters', function (Blueprint $table) {
            $table->id();
            $table->string('title', 512);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('chapters');
    }
};

Таблица для раздела «Избранное»

Поля таблицы:Поля таблицы:

  • id
  • id_telegram
  • favorite_value (JSON данные со списком статей)
  • created_at
  • updated_at

Код файла миграции:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('favorites', function (Blueprint $table) {
            $table->id();
            $table->bigInteger('id_telegram');
            $table->json('favorite_value');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('favorites');
    }
};

Таблица для раздела «Прогресс обучения»

Поля таблицы:

  • id
  • id_telegram
  • progress_value (JSON данные со списком статей)
  • created_at
  • updated_at

Код файла миграции:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('progress_study', function (Blueprint $table) {
            $table->id();
            $table->bigInteger('id_telegram');
            $table->json('progress_value');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('progress_study');
    }
};

Запуск созданных миграций

Для запуска миграций необходимо прописать консольную команду команду

php artisan migrate

Если вы сделали всё корректно, то в вашей БД появятся все необходимые таблицы.

Материалы курса