FilamentについてLLMに聞くと以下のような回答が返ってきました。なかなか良さそうなので早速試してみます。

Filamentは、Laravel アプリケーションのためのオープンソースの管理パネル作成フレームワークです。簡単に言うと、Filament を使うと、わずか数行のコードで、美しく、機能的な管理パネルを構築できます。

Filamentを使うと以下のようなメリットがあります:

  • 迅速な開発: Filament は、事前構築されたコンポーネントとテンプレートを提供することで、開発時間を大幅に短縮します。
  • 美しいデザイン: Filament は、洗練された UI と UX を提供し、ユーザーエクスペリエンスを向上させます。
  • カスタマイズ性: Filament は、豊富なカスタマイズオプションを提供し、アプリケーションのニーズに合わせて管理パネルを調整できます。
  • 強力な機能: Filament は、ユーザー管理、認証、アクセス制御、データテーブル、フォーム、ファイルアップロードなど、管理パネルに不可欠な機能をすべて備えています。
  • コミュニティサポート: Filament は、活発なコミュニティサポートがあり、質問や問題解決の支援を受けることができます。

プロジェクト作成とFilamentインストール

新しいLaravelプロジェクトを以下のように作成します。

composer create-project laravel/laravel companydb
cd companydb

.envのDB設定を書き換えます。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=companydb
DB_USERNAME=root
DB_PASSWORD=xxxx

mysqlにcompanydbデータベースを新規作成し、migrationコマンドを実行します。

php artisan migrate

filament DOCSに従ってFilamentのインストールをします。

composer require filament/filament:"^3.2" -W
 
php artisan filament:install --panels

php artisan make:filament-user

ブラウザでhttp://127.0.0.1:8000/admin/にアクセスすれば作成したユーザとパスワードでログインできます。

ログインすると以下のような画面が表示されます。

データベースモデルを作成する

Model::unguard()を追加

AppServiceProvider.phpModel::unguard()を追加します。

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        Model::unguard();
    }

Blueprintを使ってモデルを作成する

モデルの作成はBlueprintというツールを使って行います。まず以下のようにインストールし、draft.yamlファイルを作成します。

composer require -W --dev laravel-shift/blueprint

php artisan blueprint:new

draft.yamlに以下の内容を追加し、php artisan blueprint:buildコマンドでモデルとmigrationファイルを生成します。作成したファイルの削除はblueprint:eraseでできます。

models:

  Company:
    code: string nullable
    edi_code: string nullable
    name: string index
    sector_id: id
    is_foreign: boolean default:false
    kana: string
    ename: string
    cname: string
    nickname: string
    softDeletes

    relationships:
      belongsTo: Sector, SkhSector
      belongsToMany: StockExchange

  Sector:
    name: string
    timestamps: false

    relationships:
      hasMany: Company

  StockExchange:
    name: string

    relationships:
      belongsToMany: Company

BlueprintのStubのカスタマイズ

デフォルトではBlueprintが作成するモデルにすべてprotected $fillableが作成されていますが、必要がないので以下のようにカスタマイズします。

php artisan blueprint:stubs

これによってstubs/blueprintが作成され、その中のmodel.fillable.stubprotected $fillable = [];が書いてありますので、コメントを含めてすべて削除します。同様にmodel.guarded.stubの中身もすべて削除します。