【问题标题】:Runnin Faker locally and on production creates different set of Id's在本地和生产环境中运行 Faker 会创建不同的 Id 集
【发布时间】:2017-01-04 02:57:31
【问题描述】:

我正在使用 Laravel 5.3 并使用 Faker 创建一些数据

在本地运行此代码时

$factory->define(App\User::class, function (Faker\Generator $faker) {
    $username = str_replace(".","",$faker->username);
    return [
        'username' => $username,
        'email' => $faker->safeEmail,
        'password' => bcrypt('123456'),
        'remember_token' => str_random(10),
    ];
});

生成 id 范围为 1-50 的数据,如下图所示 http://i.imgur.com/DhIK8JP.png

另一段代码在它之后运行,并期望用户 ID 在 1-50 之间

$factory->define(App\Album::class, function (Faker\Generator $faker) {
    return [
        'hash' => str_random(7),
        'title' => $faker->sentence,
        'user_id' => $faker->numberBetween(1, 50),
        'published' => false,
    ];
});

每次我运行 php artisan db:seed 时,这一切都在本地工作 我现在正在使用来自 cleardb.com 的 Heroku 和 mysql 插件

当我部署和运行 db:seed 时,它每次都会产生这个。每次我运行它时,ID 总是从 4 开始到 494。因此,当我尝试在生产中播种时,我的 db:seed 失败,因为它期望用户 ID 为 1-50。有什么想法吗?

http://i.imgur.com/yZqz70K.png

【问题讨论】:

    标签: php mysql laravel heroku faker


    【解决方案1】:

    我认为你应该在你的桌子上重置 auto_increment 计数器:

    ALTER TABLE tablename AUTO_INCREMENT = 1
    

    【讨论】:

    • 如何在 laravel 迁移文件中做到这一点?
    • 您可以通过 DB::table('table_name')->truncate(); 清除表。它也会重置计数器。
    • 截断表如何设置 auto_increment 为 1?
    • 我也在做种子之前做清除旧数据。此后计数器从 1 开始。
    • 我不认为截断对我有用。我已经尝试过了,但它没有起到作用。这是我发现的: ClearDB 使用循环复制来提供主-主 MySQL 支持。因此,必须配置某些东西,例如 auto_increment 键(或序列),以便在所有情况下一个主控器不使用与另一个主控器相同的键。为此,我们将 MySQL 配置为跳过某些键,并强制 MySQL 为使用的每个键使用特定的偏移量。
    猜你喜欢
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 2011-02-27
    • 1970-01-01
    • 2018-07-05
    • 2019-06-06
    相关资源
    最近更新 更多