【问题标题】:Set autoincrement initial value in Laravel 4在 Laravel 4 中设置自增初始值
【发布时间】:2013-11-25 04:08:42
【问题描述】:

有没有办法在 Laravel 4 中使用带有 Schema Builder 的迁移设置主键的自动增量初始值?

我想将表的 id 设置为从 100 开始。我知道使用带有 ALTER TABLE MY_TABLE AUTO_INCREMENT = 111111; 的纯 SQL 是可能的,但我想使用 Laravel Migrations 维护数据库版本控制。

有什么想法吗?

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    Postgres

    class MyTableMigration extends Migration {
    
        /**
         * Run the migrations.
         *
         * @return void
         */
    
        public function up()
        {
            $statement = "ALTER SEQUENCE my_table RESTART WITH 111111";
            DB::unprepared($statement);
        }
    
        ...
    }
    

    【讨论】:

    • 这个会抛出下一个错误:Wrong object type: 7 ERROR: "users" is not a sequence (SQL: ALTER SEQUENCE users RESTART WITH 7000)
    【解决方案2】:

    恐怕 Laravel 仍然没有办法更改自动增量值,但你可以创建一个迁移并在其中进行操作:

    <?php
    
    use Illuminate\Database\Migrations\Migration;
    
    class MyTableMigration extends Migration {
    
        /**
         * Run the migrations.
         *
         * @return void
         */
    
        public function up()
        {
            $statement = "
                            ALTER TABLE MY_TABLE AUTO_INCREMENT = 111111;
                        ";
    
            DB::unprepared($statement);
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
        }
    
    }
    

    【讨论】:

    • 太好了,它在迁移时工作正常。我仍然希望它在框架本身上。我已经在 repo 上创建了一个问题请求,也许他们会实施它github.com/laravel/framework/issues/2713
    • @arielcr 您可以在框架和迁移中使用:DB::update("ALTER TABLE {your table name} AUTO_INCREMENT = 1;");
    • @casafred - 绝妙的建议 - 就像一个魅力。
    • 据称此功能不会被广泛使用。但显然,他们的要求足以让他们决定他们应该锁定对话:github.com/laravel/framework/issues/2713#event-178381333 锁定讨论以防止进一步评论不应成为任何开源项目的一部分。它激怒了我。
    猜你喜欢
    • 2010-12-01
    • 2011-11-25
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2012-05-16
    相关资源
    最近更新 更多