Сеялка Laravel устанавливает первую запись с ID 2

Я пытаюсь заполнить свою базу данных через DatabaseSeeder Laravel, но когда он заполняет базу данных, первая строка имеет идентификатор 2 вместо 1.

DatabaseSeeder.php

public function run()
{

foreach ($this->to_truncate as $table) {
DB::table($table)->truncate();
}

$this->call('UsersTableSeeder');
}

UsersTableSeeder.php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
public function run()
{
factory('App\User', 1)->create();
}
}

ModelFactory.php

$factory->define(App\User::class, function (Faker\Generator $faker) {
return [
'full_name' => 'Jakub Kohout',
'username' => 'Admin',
'email' => '[email protected]',
'password' => bcrypt('Uchiha'),
'role_id' => 1
];
});

Мой процесс посева выглядит так:

heroku run php artisan migrate
heroku run php artisan db:seed

Это миграция для моей модели User:

public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('username');
$table->string('email')->unique();
$table->string('full_name');
$table->integer('role_id')->unsigned();
$table->string('password', 60);
$table->rememberToken();
$table->timestamps();
});
}

1

Решение

если ваш идентификатор является автоинкрементным, и вы помещаете 1 строку перед тем, как удалить его, то идентификатор второй строки будет равен 2, это mysql, а не laravel. и вы можете решить эту проблему, опустив таблицу, затем создайте ее заново с автоматическим приращением, начинающимся с 1.

или вы можете этот запрос:

ALTER TABLE tablename AUTO_INCREMENT = 1
2

Другие решения

Я предполагаю, что вы используете MySQL — если это так, вы можете выполнить следующую команду:

SHOW VARIABLES LIKE 'auto_inc%';

и он должен вернуть что-то вроде:

+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 10    |
| auto_increment_offset    | 2     |
+--------------------------+-------+

Смещение это то, что дает вам головную боль. И то, и другое можно установить, запустив (из MySQL):

SET @@auto_increment_increment=1;
SET @@auto_increment_offset=1;
1

По вопросам рекламы [email protected]