1
2

More than 3 years have passed since last update.

DB設計ファーストでLaravel開発をする場合に、Modelクラスを自動生成する

Last updated at Posted at 2021-02-07

Laravelの新規開発では、通常DBのテーブル作成には、Migrationファイルを使います。

Laravel 7.x データベース:マイグレーション
https://readouble.com/laravel/7.x/ja/migrations.html

では、既存のDBが存在しているプロジェクトの場合はどうするでしょうか?
この場合、Reliese Laravel というパッケージを使って、Modelクラスを自動生成することができます。

Reliese Laravel
https://github.com/reliese/laravel

Reliese Laravelのインストール

では早速、Composerでインストールしてみましょう。

composer require reliese/laravel --dev

Reliese Laravelの読み込みのためプロバイダー登録

app/Providers/AppServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        if ($this->app->environment() == 'local') {
            $this->app->register(\Reliese\Coders\CodersServiceProvider::class);
        }
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

Reliese Laravelによるモデルの自動生成

下記コマンドで、すべてのテーブルのモデルを自動生成します!

php artisan code:models

特定のテーブルのモデルのみ自動生成したい場合は下記のコマンドを実行します。

php artisan code:models --table=users

これらのコマンドを実行すると「app/Models」 のフォルダ階層にModelクラスが作られます。

メリット

DBにリレーションがはられている場合は、hasMany, belongsToのリレーションが自動で作成されるため、複雑なJOINなどを書く必要はなくなります。
Eloquentなら、Controller側・View側でも使えて開発がかなり楽になります。

注意点

DBの内容が変わった場合、手動で書き換えるか、Reliese Laravelで再度自動生成する必要があります。
Reliese Laravelで再度自動生成する場合、Modelクラスに独自で追加したプロパティやメソッドは消えてしまいますので、
私は今回、既存の「app/Models」 は別フォルダにバックアップしてから、自動生成してその後、バックアップの内容を追記する形にしました。
「config/model.php」の'base_files' をtrueにすると、独自のモデル変更を失わないようにできるみたいです。こちらを試してみるのもいいかもしれません。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2