9
7

More than 3 years have passed since last update.

LaravelのEloquentModelクラスを自動生成する

Posted at

始まったばかりのLaravelのプロジェクトでは、移行元のある案件なので既存のデータベースをそのまま使います。
というときに、既存のテーブルから Laravel の Eloquent Model クラスを自動生成したときの作業記録です

こちらのライブラリを追加いました(読み方・呼び方不明です)
https://github.com/reliese/laravel

composer でライブラリを追加

composer require --dev reliese/laravel

このとき、 killed と表示されたらメモリ不足を疑ってみてください。
Dockerで開発環境を作っているならばこちらに書いた方法で対処できました。

Docker内でcomposer require したらkilledになったときの対応
https://qiita.com/makies/items/3e1064f17a18df750cad

パッケージを追加

AppServiceProvider に追記します

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Reliese\Coders\CodersServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        // 追記ここから
        if ($this->app->environment() === 'local') {
            $this->app->register(CodersServiceProvider::class);
        }
        // ここまで
    }

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

設定ファイルを作成

設定ファイルが config/models.php に生成されます。
configは一旦削除しておいたほうが良さそうです

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

モデルファイル生成

php artisan code:models

DBにあるテーブルに対するModelファイルが生成されます。
デフォルトで app/Models 以下に生成されます。

config/models.php で、出力先や親クラスなどを指定することができます。

生成されない場合

生成されない場合 DBのテーブルが存在しているかを確認しましょう
DBデータの永続化していない場合、DBコンテナを再起動するとデータベースが消えてしまいます。
migrationを流してから 再実行してください。

生成されるコード

  • クラスプロパティ(=テーブルのカラム)
    • @property でクラスのdocコメントに記述
  • $table テーブル名
  • $primaryKey プライマリキー
  • $incrementing プライマリキーをインクリメントするかどうか
  • timestamps タイムスタンプを自動更新するカラム
  • $casts 型を自動キャストするカラム
  • $dates Carbonに自動変換するカラム
  • $fillable 書き込み可能なカラム
9
7
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
9
7