如何创建一个可以调用所有迁移类的主迁移类?
Posted
技术标签:
【中文标题】如何创建一个可以调用所有迁移类的主迁移类?【英文标题】:How to create a master migration class that would call all your migration classes? 【发布时间】:2019-07-02 06:32:07 【问题描述】:在 Laravel 中,创建迁移和播种器的顺序至关重要。
当这些在 artisan 中运行时,如果一个类(表)中有任何外键,并且一个在被引用的那个之前执行,那么执行将停止,并且你会得到一个错误。
当您调用 php artisan db:seed
时,会运行一个名为 DatabaseSeeder
的类。本课程包括您所有的播种机课程。
https://laravel.com/docs/5.7/seeding#writing-seeders
迁移有什么等价物吗?
<?php
class DatabaseSeeder extends Seeder
public function run()
$this->call([
LanguageTableDataSeeder::class,
UserTableDataSeeder::class,
PlaceTableDataSeeder::class]);
【问题讨论】:
【参考方案1】:是的,你可以做到的
但不推荐
第 1 步:
运行命令 php artisan make:migration create_bulk_table
现在打开database/migrations
中的迁移文件夹,您将找到新的迁移time_stamp_create_bulk_table.php
打开它你会发现这样的内容
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateBulkTable extends Migration
/**
* Run the migrations.
*
* @return void
*/
public function up()
Schema::create('bulk', function (Blueprint $table)
$table->increments('id');
$table->timestamps();
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::dropIfExists('bulk');
怎么做
这里面有两种方法
一个用于creating the table
,即up METHOD
和
另一个是dropping the table
,即down METHOD
例如如果你想迁移
posts
表,tasks
表,products
表
在单一迁移中
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateBulkTable extends Migration
/**
* Run the migrations.
*
* @return void
*/
public function up()
if (!Schema::hasTable('posts'))
Schema::create('posts', function (Blueprint $table)
$table->increments('id');
$table->string('post_name');
$table->text('post_desc');
$table->timestamps();
);
if (!Schema::hasTable('tasks'))
Schema::create('tasks', function (Blueprint $table)
$table->increments('id');
$table->string('task_name');
$table->enum('task_status', ['Open', 'Closed','Inactive']);
$table->text('task_desc');
$table->timestamps();
);
if (!Schema::hasTable('products'))
Schema::create('products', function (Blueprint $table)
$table->increments('id');
$table->string('product_name');
$table->text('product_desc');
$table->string('product_price');
$table->timestamps();
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::dropIfExists('posts');
Schema::dropIfExists('tasks');
Schema::dropIfExists('products');
BE CAREFUL WHILE REFERING THE FORIEGN KEY OF PARENT TABLE WHICK NEEDS TO BE CREATED BEFORE THE REFERAL
例如,您在 post 表中有列 user_id
,您所指的就像
$table->foreign('user_id')->references('id')->on('users');
users
表需要在posts
表之前迁移
希望清楚
如果您发现任何错误,请在下方评论
【讨论】:
谢谢 Manojkiran A.!这样做是有道理的。有趣的是,没有特定的工匠命令可以使它像 `` DatabaseSeeder ``。太方便了!以上是关于如何创建一个可以调用所有迁移类的主迁移类?的主要内容,如果未能解决你的问题,请参考以下文章