Jak wszyscy odpowiedzieli, że nie jest naprawdę konieczne, aby przesunąć licznik z powrotem po usunięciu wiersza. Możesz jednak truncate
utworzyć tabelę, która usunie wszystkie wiersze tabeli i zresetuje licznik.
Nie możesz truncate
tabela, która ma Foreign Key Constraints
stosowane na nim (truncate
nie jest taka sama jak delete
która po prostu usuwa wszystkie wiersze podczas utrzymanie licznik automatycznego przyrostu.).
W związku z tym, podczas korzystania z foreign key constrains
, MySQL może powstrzymać cię od obcinania tabeli, która ma do niego zastosowany foreign key constraints
.
Możesz wykonać następujące czynności, aby osiągnąć to, czego chcesz, ale pamiętaj, że może to zagrażać integralności danych. Używam go tylko do moich celów testowych .
Edycja klasa DatabaseSeeder
(który jest dostępny w app/database/seeds/DatabaseSeeder.php
) w następujący sposób:
<?php
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Eloquent::unguard();
// Disable Foreign key check for this connection before running seeders
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
$this->call('UserTableSeeder');
// ...
// FOREIGN_KEY_CHECKS is supposed to only apply to a single
// connection and reset itself but I like to explicitly
// undo what I've done for clarity
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
}
}
Teraz klas Tabela siewnik (przykład UserTableSeeder
w tym przypadku, który powinien być utworzony w app/database/seeds/UserTableSeeder.php
) może nazywamy obcina tabeli (a) w sposób następujący:
<?php
class UserTableSeeder extends Seeder {
public function run()
{
// Truncate the table.
DB::table('users')->truncate();
// The auto-increment has been reset.
// Now we can start adding users.
User::create(
array(
'email' => '[email protected].com',
'password' => Hash::make('test')
)
);
}
}
Nigdy nie ma żadnej potrzeby, aby zmienić automatycznego przyrostu podczas usuwania rekordów. – SamV
Cóż, gdy mam 15 użytkowników i usuwam ostatnie 5, nowy użytkownik otrzyma identyfikator 16, ale chcę zacząć od 10 – aimiliano
. Dlaczego chcesz go uruchomić ponownie? Nie ma na to żadnej funkcjonalnej potrzeby.Jeśli naprawdę chcesz to zrobić, musisz zrobić to tak, jak już zrobiłeś, używając surowego SQL. –