Прочитайте попередню статтю, Створення простого адміністрування блогу за допомогою Filament (Filament Series — Частина 6) перед тим, як перейти до цього!
Після створення ресурсів для категорій і тегів, ми переходимо до ресурсу постів у нашому додатку. Перед тим, як продовжити, давайте ще раз подивимося на схему наших зв'язків у базі даних нижче.
схема зв'язків простого блогу
Створимо моделі 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) перед тим, як перейти до цього!
Після ресурсів для категорії та тегів, ми тепер переходимо до ресурсу постів у нашому додатку. Перед тим, як продовжити, давайте ще раз подивимося на схему нашого зв’язку в базі даних нижче.
схема зв'язків простого блогу
Створимо моделі 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)