Я пытаюсь заполнить свою базу данных через 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 строку перед тем, как удалить его, то идентификатор второй строки будет равен 2, это mysql, а не laravel. и вы можете решить эту проблему, опустив таблицу, затем создайте ее заново с автоматическим приращением, начинающимся с 1.
или вы можете этот запрос:
ALTER TABLE tablename AUTO_INCREMENT = 1
Я предполагаю, что вы используете 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;