使用迁移生成器包从现有数据库生成迁移
发布于 作者 Paul Redmond
Laravel 迁移生成器
Laravel 迁移生成器是 Bennett Treptow 开发的一个包,用于从现有的数据库结构生成迁移
此包的主要用例是那些拥有许多迁移的项目,这些迁移使用 ->change() 从 doctrine/dbal 中修改表,而 SQLite 不支持这种方式,因此需要一种方法来更新 SQLite 用于测试的表结构。另一个用例是使用数据库和没有迁移的项目,并将该数据库转换为基础迁移。
如果您正在将现有应用程序移植到 Laravel,并且希望重新创建应用程序的数据库迁移以帮助开发和测试,那么此包可能会有所帮助。
相关 使用 Laravel 创建 密码生成器。
为了可视化此过程的工作原理,自述文件包含 示例用法,它定义了以下 users
表
CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `first_name` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `last_name` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `timezone` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'America/New_York', `location_id` int(10) unsigned NOT NULL, `deleted_at` timestamp NULL DEFAULT NULL, `remember_token` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), KEY `users_username_index` (`username`), KEY `users_first_name_index` (`first_name`), KEY `users_last_name_index` (`last_name`), KEY `users_email_index` (`email`), KEY `fk_users_location_id_index` (`location_id`) CONSTRAINT `users_location_id_foreign` FOREIGN KEY (`location_id`) REFERENCES `locations` (`id`) ON UPDATE CASCADE ON DELETE CASCADE) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
使用此包,您可以运行以下命令来根据表定义生成一个蓝图类
php artisan generate:migrations
根据示例,从 users
表派生的蓝图如下所示
use Illuminate\Support\Facades\Schema;use Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration; class CreateUsersTable extends Migration{ /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('username', 128)->nullable()->index(); $table->string('email', 255)->index(); $table->string('password', 255); $table->string('first_name', 45)->nullable()->index(); $table->string('last_name', 45)->index(); $table->string('timezone', 45)->default('America/New_York'); $table->unsignedInteger('location_id'); $table->softDeletes(); $table->string('remember_token', 255)->nullable(); $table->timestamps(); $table->foreign('location_id', 'users_location_id_foreign')->references('id')->on('locations')->onUpdate('cascade')->onDelete('cascade'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users'); }}
该包还附带各种表和视图迁移存根以及配置设置。例如,一个定义用于生成表架构的文件名模式的配置
return [ 'table_naming_scheme' => '[Timestamp]_create_[TableName]_table.php', // ...];
在撰写本文时,该包支持 MySQL,但根据自述文件,它也可以支持 Postgres、SQLite 和 SQL Server。
您可以在 GitHub 上了解更多关于此包的信息,获取完整的安装说明,并查看 源代码。
此包已提交到我们的 Laravel 新闻链接 部分。链接是社区可以发布有关 Laravel 生态系统的包和教程的地方。在 Twitter 上关注我们 @LaravelLinks