Laravel

[Lravel8]モデルを自動生成するときにfillableも自動でお願いします

Laravel8でやりました。

モデル(Model)の生成は下記でできますが、fillableを転機するのが、カラムが多くて面倒。

php artisan make:model テーブル名

色々と調べていると、このようなものがあるらしい

krlove/eloquent-model-generator: Eloquent Model Generato

参考サイト:https://oki2a24.com/2019/06/06/generate-model-from-existing-database-in-laravel-5-5/

これでインストール

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer require krlove/eloquent-model-generator --dev
composer require krlove/eloquent-model-generator --dev
composer require krlove/eloquent-model-generator --dev

あ、その前にこれでDBにテーブルを作っておいてね!

php artisan make:migration create_テーブル名(複数形)_table

んで、これでModelを作ると

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
php artisan krlove:generate:model モデル名(キャメル&複数形でない)
php artisan krlove:generate:model モデル名(キャメル&複数形でない)
php artisan krlove:generate:model モデル名(キャメル&複数形でない)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
class モデル名 extends Model
{
/**
* The "type" of the auto-incrementing ID.
*
* @var string
*/
protected $keyType = 'integer';
/**
* @var array
*/
protected $fillable = ['カラム名1', 'カラム名2', 'カラム名3', 'カラム名4', 'カラム名5',//自動で生成 Automatically generated
}
class モデル名 extends Model { /** * The "type" of the auto-incrementing ID. * * @var string */ protected $keyType = 'integer'; /** * @var array */ protected $fillable = ['カラム名1', 'カラム名2', 'カラム名3', 'カラム名4', 'カラム名5',//自動で生成 Automatically generated }
class モデル名 extends Model
{
    /**
     * The "type" of the auto-incrementing ID.
     * 
     * @var string
     */
    protected $keyType = 'integer';

    /**
     * @var array
     */
    protected $fillable = ['カラム名1', 'カラム名2', 'カラム名3', 'カラム名4', 'カラム名5',//自動で生成 Automatically generated
}

ちなみに、app直下に自動生成されます。

これをModelsディレクトリに生成させたい時は、config/eloquent_model_generator.phpファイルを作って下記を入れると、いけるようだけど、自分の環境ではエラーになる。。。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
return [
'model_defaults' => [
'namespace' => 'App\Models',
'base_class_name' => \Illuminate\Database\Eloquent\Model::class,
'output_path' => '/Models', // appからの相対パス
'no_timestamps' => true,// created_at, updated_atを使わないか使うか
'date_format' => 'U',
'backup' => true,
],
];
<?php return [ 'model_defaults' => [ 'namespace' => 'App\Models', 'base_class_name' => \Illuminate\Database\Eloquent\Model::class, 'output_path' => '/Models', // appからの相対パス 'no_timestamps' => true,// created_at, updated_atを使わないか使うか 'date_format' => 'U', 'backup' => true, ], ];
<?php
return [
    'model_defaults' => [
        'namespace'       => 'App\Models',
        'base_class_name' => \Illuminate\Database\Eloquent\Model::class,
        'output_path'     => '/Models', // appからの相対パス 
        'no_timestamps'   => true,// created_at, updated_atを使わないか使うか
        'date_format'     => 'U',
        'backup'          => true,
    ],
];

こんなエラーで怒られる

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ErrorException
mkdir(): Read-only file system
at vendor/krlove/eloquent-model-generator/src/Generator.php:73
69}
70}
71
72if (!is_dir($path)) {
73if (!mkdir($path, 0777, true)) {
74▕ throw new GeneratorException(sprintf('Could not create directory %s', $path));
75}
76}
77
ErrorException mkdir(): Read-only file system at vendor/krlove/eloquent-model-generator/src/Generator.php:73 69▕ } 70▕ } 71▕ 72▕ if (!is_dir($path)) { ➜ 73▕ if (!mkdir($path, 0777, true)) { 74▕ throw new GeneratorException(sprintf('Could not create directory %s', $path)); 75▕ } 76▕ } 77▕
ErrorException 

 mkdir(): Read-only file system

 at vendor/krlove/eloquent-model-generator/src/Generator.php:73
    69▕             }
    70▕         }
    71▕ 
    72▕         if (!is_dir($path)) {
 ➜  73▕             if (!mkdir($path, 0777, true)) {
    74▕                 throw new GeneratorException(sprintf('Could not create directory %s', $path));
    75▕             }
    76▕         }
    77▕

まぁ、生成後にModelsに移動させるだけだから、自分はeloquent_model_generator.phpを使いません!キッパリ

でもどこがおかしいかわかる人はおせえて〜

!!!注意!!!

app直下に作られたモデルをModelsに移動したら各モデルのnamespaceを
namespace App;
から
namespace App\Models;
に変更しないとエラーになる。

 

-Laravel

S