Laravel 拉威尔提出了许多移民问题

Laravel 拉威尔提出了许多移民问题,laravel,migration,Laravel,Migration,10人开始与拉威尔新项目。 例如,2、3年后将有许多迁移 class CreateSnapshotTables extends Migration { /** * Run the migrations. * * @return void */ public function up() { // Create users table DB::statement(" CREATE

10人开始与拉威尔新项目。 例如,2、3年后将有许多迁移

class CreateSnapshotTables extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // Create users table
        DB::statement("
            CREATE TABLE `users` (
                `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
                `password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
                `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
                `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
                `remember_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
                `created_at` timestamp NULL DEFAULT NULL,
                `updated_at` timestamp NULL DEFAULT NULL,
                `deleted_at` timestamp NULL DEFAULT NULL,
                PRIMARY KEY (`id`),
                UNIQUE KEY `users_email_unique` (`email`)
            );
        ");

        // Create posts table
        DB::statement("
            CREATE TABLE `posts` (
                `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
                `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,

                // ...etc.

                PRIMARY KEY (`id`),
                UNIQUE KEY `users_email_unique` (`email`)
            );
        ");
    }
}
如果新程序员加入团队,他将用代码和数据库设置开发环境

问题是,如果有很多迁移,那么如果有数千次迁移,那么运行速度就会太慢

class CreateSnapshotTables extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // Create users table
        DB::statement("
            CREATE TABLE `users` (
                `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
                `password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
                `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
                `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
                `remember_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
                `created_at` timestamp NULL DEFAULT NULL,
                `updated_at` timestamp NULL DEFAULT NULL,
                `deleted_at` timestamp NULL DEFAULT NULL,
                PRIMARY KEY (`id`),
                UNIQUE KEY `users_email_unique` (`email`)
            );
        ");

        // Create posts table
        DB::statement("
            CREATE TABLE `posts` (
                `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
                `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,

                // ...etc.

                PRIMARY KEY (`id`),
                UNIQUE KEY `users_email_unique` (`email`)
            );
        ");
    }
}

如何处理这个问题?

是的,每次运行100次迁移都会让人头疼。您需要创建数据库表的快照,并将其作为第一次迁移

例如,假设您有一个带有
帖子
用户
表的博客。对于每个表,您都需要一个CREATETABLE语句。如果您正在使用MySql为
用户
表获取CREATETABLE语句,您将查询:

显示创建表用户

一旦有了CREATETABLE语句,就可以进行新迁移,运行这些查询并归档所有旧迁移

class CreateSnapshotTables extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // Create users table
        DB::statement("
            CREATE TABLE `users` (
                `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
                `password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
                `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
                `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
                `remember_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
                `created_at` timestamp NULL DEFAULT NULL,
                `updated_at` timestamp NULL DEFAULT NULL,
                `deleted_at` timestamp NULL DEFAULT NULL,
                PRIMARY KEY (`id`),
                UNIQUE KEY `users_email_unique` (`email`)
            );
        ");

        // Create posts table
        DB::statement("
            CREATE TABLE `posts` (
                `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
                `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,

                // ...etc.

                PRIMARY KEY (`id`),
                UNIQUE KEY `users_email_unique` (`email`)
            );
        ");
    }
}

使用生成新的迁移批。这对我来说真的很有用。我应该注意到有一些注意事项,但是你可以把它分叉,修改包以满足你的需要。谢谢,这是个好主意。它会起作用的。有一个限制是每次都应该手动进行迁移。有朝一日,可能会出现自动创建数据库迁移,扫描所有迁移并生成一个迁移,或者每次新迁移都会生成公共迁移,最后一个迁移。例如,如果我创建列username,然后将其更改为user,那么在通用迁移中,只有列“user”的“merged”更改。其中一个问题是不可逆的迁移,比如删除列。