Как создавать модели и миграции и определять отношения с помощью одной команды
Я хочу запустить пользовательскую команду, например
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()
метод этого файла.
Так что, если вы знаете, пожалуйста, дайте мне знать...