Створення простого адміністрування блогу за допомогою Filament (Filament Series — Частина 7)

Прочитайте попередню статтю, Створення простого адміністрування блогу за допомогою Filament (Filament Series — Частина 6) перед тим, як перейти до цього!

pic

Після створення ресурсів для категорій і тегів, ми переходимо до ресурсу постів у нашому додатку. Перед тим, як продовжити, давайте ще раз подивимося на схему наших зв'язків у базі даних нижче.

pic

схема зв'язків простого блогу

Створимо моделі Post і міграції за допомогою наступної команди:

php artisan make:model Post -m

Після того, як файли міграцій для таблиці постів будуть створені, відкриємо файл міграції для постів і відредагуємо його відповідно до дизайну бази даних, який ми показали вище. Це допоможе нам визначити колонки таблиці категорій відповідно до наших вимог.

Schema::create('posts', function (Blueprint $table) {  
 $table->id();  
 $table->string('title');  
 $table->string('slug')->unique();  
 $table->text('body');  
 $table->string('feature_image')->nullable();  
 $table->string('status')->default('draft');  
 $table->foreignId('category_id');  
 $table->foreign('category_id')->references('id')->on('categories')->onDelete('restrict');  
 $table->foreignId('created_by');  
 $table->foreign('created_by')->references('id')->on('users')->onDelete('restrict');  
 $table->timestamps();  
 });

Також потрібно створити міграцію для зв'язкової таблиці post_tag за допомогою цієї команди:

php artisan make:migration CreatePostTagTable

Після того, як файли міграцій будуть згенеровані, ми відредагуємо їх наступним чином:

Schema::create('post_tag', function (Blueprint $table) {  
 $table->unsignedBigInteger('post_id');  
 $table->unsignedBigInteger('tag_id');  
 $table->foreign('post_id')->references('id')->on('posts')->onDelete('restrict');  
 $table->foreign('tag_id')->references('id')->on('tags')->onDelete('restrict');  
 });

Після налаштування файлів міграцій для постів, наступний крок — виконати команду php artisan migrate, щоб застосувати ці міграції до бази даних. Після того, як міграції будуть завершені, ми також створюємо файл App/Enums/PostStatus.php для збереження стовпця статусу.

name;  
 }  

 public function getColor(): string | array | null  
 {  
 return match ($this) {  
 self::Draft => 'gray',  
 self::Reviewing => 'warning',  
 self::Published => 'success',  
 self::Rejected => 'danger',  
 };  
 }  

 public function getDescription(): ?string  
 {  
 return match ($this) {  
 self::Draft => 'Це ще не завершено.',  
 self::Reviewing => 'Це готово для того, щоб член команди прочитав.',  
 self::Published => 'Це було схвалено членом команди і опубліковано на вебсайті.',  
 self::Rejected => 'Член команди вирішив, що це не підходить для сайту.',  
 };  
 }  
}

Тепер ми можемо налаштувати модель Post перед тим, як виконати команду створення ресурсу Filament.

Прочитайте попередню статтю, Створення простого адміністрування блогу за допомогою Filament (Filament Series — Частина 6) перед тим, як перейти до цього!

pic

Після ресурсів для категорії та тегів, ми тепер переходимо до ресурсу постів у нашому додатку. Перед тим, як продовжити, давайте ще раз подивимося на схему нашого зв’язку в базі даних нижче.

pic

схема зв'язків простого блогу

Створимо моделі Post та міграції за допомогою наступної команди:

php artisan make:model Post -m

Після того, як файли міграцій для таблиці постів будуть створені, відкриємо файл міграції для постів і відредагуємо його відповідно до дизайну бази даних, який ми показали вище. Це допоможе нам визначити колонки таблиці категорій відповідно до наших вимог.

Schema::create('posts', function (Blueprint $table) {  
 $table->id();  
 $table->string('title');  
 $table->string('slug')->unique();  
 $table->text('body');  
 $table->string('feature_image')->nullable();  
 $table->string('status')->default('draft');  
 $table->foreignId('category_id');  
 $table->foreign('category_id')->references('id')->on('categories')->onDelete('restrict');  
 $table->foreignId('created_by');  
 $table->foreign('created_by')->references('id')->on('users')->onDelete('restrict');  
 $table->timestamps();  
 });

Також потрібно створити міграцію для зв'язкової таблиці post_tag за допомогою цієї команди:

php artisan make:migration CreatePostTagTable

Після того, як файли міграцій будуть згенеровані, ми відредагуємо їх наступним чином:

Schema::create('post_tag', function (Blueprint $table) {  
 $table->unsignedBigInteger('post_id');  
 $table->unsignedBigInteger('tag_id');  
 $table->foreign('post_id')->references('id')->on('posts')->onDelete('restrict');  
 $table->foreign('tag_id')->references('id')->on('tags')->onDelete('restrict');  
 });

Після налаштування файлів міграцій для постів, наступний крок — виконати команду php artisan migrate, щоб застосувати ці міграції до бази даних. Після того, як міграції будуть завершені, ми також створюємо файл App/Enums/PostStatus.php для збереження стовпця статусу.

name;  
 }  

 public function getColor(): string | array | null  
 {  
 return match ($this) {  
 self::Draft => 'gray',  
 self::Reviewing => 'warning',  
 self::Published => 'success',  
 self::Rejected => 'danger',  
 };  
 }  

 public function getDescription(): ?string  
 {  
 return match ($this) {  
 self::Draft => 'Це ще не завершено.',  
 self::Reviewing => 'Це готово для того, щоб член команди прочитав.',  
 self::Published => 'Це було схвалено членом команди і опубліковано на вебсайті.',  
 self::Rejected => 'Член команди вирішив, що це не підходить для сайту.',  
 };  
 }  
}

Тепер ми можемо налаштувати модель Post перед тим, як виконати команду створення ресурсу Filament.

Перегляньте мої роботи на Medium ([https://medium.com/@halimdirgantara](/@halimdirgantara)) та GitHub ([https://github.com/halimdirgantara/](https://github.com/halimdirgantara/))._

Перекладено з: Creating Simple Blog Admin Using Filament (Filament Series — Part 7)

Leave a Reply

Your email address will not be published. Required fields are marked *