Как создавать модели и миграции и определять отношения с помощью одной команды

Я хочу запустить пользовательскую команду, например

php artisan make:custom-model MODEL_NAME_1 MODEL_NAME_2 --type=RELATION_TYPE

который создает две модели и две миграции с определенным отношением.

Например, если я запускаю это:

      php artisan make:custom-model Author Book --type=nn

Таким образом, вновь созданные модели идут сюда:

      class Author extends Model
{
    use HasFactory;

    public function books()
    {
        return $this->belongsToMany(Book::class);
    }
}

class Book extends Model
{
    use HasFactory;

    public function authors()
    {
        return $this->belongsToMany(Author::class);
    }
}

С этими миграциями:

      class CreateAuthorsTable extends Migration
{
    public function up()
    {
        Schema::create('authors', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('authors');
    }
}

class CreateBooksTable extends Migration
{
    public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('books');
    }
}

class CreateAuthorBookTable extends Migration
{
    public function up()
    {
        Schema::create('author_book', function (Blueprint $table) {
            $table->id();
            $table->foreignId('author_id')->constrained()->onDelete('cascade');
            $table->foreignId('book_id')->constrained()->onDelete('cascade');
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('author_book');
    }
}

Итак, чтобы сделать это, я создал новую команду, подобную этой:

      class custom-model extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'make:custom-model {modelName1} {modelName2} {--type}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Auto Relationship Maker';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
          // make files 
    }
}

Но я не знаю, как сделать нужные коды и файлы вhandle()метод этого файла.

Так что, если вы знаете, пожалуйста, дайте мне знать...

0 ответов

Другие вопросы по тегам