在Laravel 4中设置自增初始值

8

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

我想将表的ID设置为从100开始。我知道可以使用纯SQL语句ALTER TABLE MY_TABLE AUTO_INCREMENT = 111111;来实现,但我希望能够维护Laravel Migrations的数据库版本控制。

你有什么建议吗?

2个回答

23

很抱歉,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()
    {
    }

}

很好,迁移上运行良好。我仍希望它能够在框架本身上运行。我已在存储库上创建了一个问题请求,也许他们会实现它 https://github.com/laravel/framework/issues/2713 - arielcr
3
你可以在框架和迁移中使用以下代码:DB::update("ALTER TABLE {your table name} AUTO_INCREMENT = 1;");该代码可以重置指定数据库表的自增长ID从1开始。 - casafred
@casafred - 绝妙的建议 - 像魔法一样奏效。 - al_manchester
1
据称,此功能不会被广泛使用。但是显然,足够多的人要求将其锁定在对话中,以至于他们决定应该锁定对话:https://github.com/laravel/framework/issues/2713#event-178381333在任何开源项目中,关闭讨论并禁止进一步评论都不应成为其中的一个部分。这让我感到非常愤怒。 - Gerry

1
"Postgres:" (保留HTML标记)
class MyTableMigration extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */

    public function up()
    {
        $statement = "ALTER SEQUENCE my_table RESTART WITH 111111";
        DB::unprepared($statement);
    }

    ...
}

这个代码会抛出以下错误:对象类型错误:7 错误:“users”不是一个序列(SQL: ALTER SEQUENCE users RESTART WITH 7000) - enbermudas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接