Laravel Eloquent モデルを既存テーブルから自動生成する


MySQL 限定ですが、全テーブルを1発で Eloquent Model に変換するパッケージを見つけたので紹介します。

今回見つけたのは Reliese Laravel というパッケージです。使い方としてはリンク先にあるとおりにコマンドを実行するのみです。

まずはパッケージをインストールします。

composer require reliese/laravel

config/app.phpprovidersに下記のように記述し、サービスプロバイダを登録します。(追記:Laravel 5.5 以上ならばこの手順はスキップできます)

    'providers' => [
        // ...
        Reliese\Coders\CodersServiceProvider::class,
    ],

以下のコマンドを実行します。設定ファイルconfig/models.phpが生成されます。

php artisan vendor:publish --tag=reliese-models

以下のコマンドを実行すると、app/Models配下にモデルが出力されます。

php artisan code:models

出力されたモデルには、$table はもちろん $casts や $fillable など一通り設定されています。外部キー制約がきちんと設定されているテーブルであれば、それらも出力されます。

論理削除や作成日、更新日も検出し出力してくれます。ただ、デフォルトの設定だと deleted_at, created_at, updated_atになるので、列名が異なる場合は設定変更が必要です。config/models.phpを以下のように変更します。

        // 'timestamps' => true, // もともとの設定

        'timestamps' => [
            'enabled' => true,
            'fields' => [
                'CREATED_AT' => 'created_date', // created_at → created_date
                'UPDATED_AT' => 'updated_date', // updated_at → updated_date
            ]
        ],

        // ...

        // 'soft_deletes' => true, // もともとの設定

        'soft_deletes' => [
            'enabled' => true,
            'field' => 'deleted_date', // deleted_at → deleted_date
        ],

論理削除は日時型の想定なので、 試してはいませんがフラグで持っているシステムでは Eloquent 標準の soft deleting は使用できないと思います。

Eloquent モデルの日時は結構寛容で、DB側の型は datetime ではなくてもある程度は変換してくれます。変換処理はこの辺です(ただし YmdHis 形式の文字列は is_numeric → true となり UNIX 時間として処理されるので注意)。

設定項目は他にもいくつかあります。モデルの出力場所、モデルの親クラス、テーブルのプレフィックス、除外テーブル名などが設定できます。きれいなコードですしコメントも丁寧に書かれているので、 models.php の中身を見ていただくとわかると思います。


Eloquent のモデルは必要最低限の記述で動作するので、実装のコストが低いのが特徴です。とはいっても既存システムのテーブルをすべて書き出すとなると結構な手間がかかります。それをコマンド1つで、手を抜きがちな $fillable も含めきっちり出力してくれるというのは非常にありがたいですね。今後使ってみようと思います。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください