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の読み込みのためプロバイダー登録
<?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にすると、独自のモデル変更を失わないようにできるみたいです。こちらを試してみるのもいいかもしれません。