krlove/eloquent-model-generator: Eloquent Model Generator
LaravelのEloquentモデルをORM(オブジェクト関係マッピング)として自在動かすにはDB中の1テーブルに対して1モデルを定義、更にテーブル間の関係をメソッドに記述、とする必要があります。これはいつも同じことを記述する上、大量に必要となるため面倒です。eloquent-model-generatorはこれを解決します。
eloquent-model-generatorはDB中の定義からEloquentモデルを生成するライブラリです。例によってcomposerでインストール、
composer require krlove/eloquent-model-generator --dev
artisanから起動できます。基本は次です。
# モデル名を指定(テーブル名はモデル名の複数形) php artisan krlove:generate:model User # モデル名とテーブル名を指定 php artisan krlove:generate:model User --table-name=user
これだけでリレーション、fillableをはじめとした様々なオプション付きのモデルが生成されます。
テーブル名らをコピペして、コマンドを量産して叩くだけでも便利ですがconfigを使うとさらに便利になります。
<?php return [ 'namespace' => 'App\Models', // namespaceの冠詞 'base_class_name' => \Illuminate\Database\Eloquent\Model::class, // Modelの継承元 'output_path' => '/full/path/to/output/directory', // Modelの出力先ディレクトリ 'no_timestamps' => true, // created_at, updated_atを使わないか使うか 'date_format' => 'U', // datetimeカラムからデータを取得する時のフォーマット。nullだとCarbon 'connection' => 'other-connection', // 不明 'backup' => true, // 元々あるモデルを壊さないか否か ];
Eloquent共通の設定が出来ます。
さらに、この記事を書いている時点(2019/06/10)のプルリクに全てのモデルを生成するコマンドがあります。
Create Command To Generate All Models by tprj29 · Pull Request #46 · krlove/eloquent-model-generator
このプルリクにあるコマンドファイルをコ用いて、 artisan krlove:generate:all-modelsを実行すると、DB中のテーブルを全て読み取り、全てに対応するEloquentモデルが生成されます。
さらにこれをartisan ide-helper:modelsやartisan test-factory-helper:generateと組み合わせることで素のEloquentが更に充実します。