Wie reset auto increment in laravel Benutzer löschen?
Ich kämpfen, um herauszufinden, eine Möglichkeit zum zurücksetzen der auto-Inkrement-Wert in Laravel 4, aber es scheint, dass diese Funktionalität nicht eingebettet in laravel 4 zumindest für jetzt.
so habe ich es auf diese Weise:
$user = User::find($user_id);
if ($user) {
if ($user->delete()){
DB::statement('ALTER TABLE users AUTO_INCREMENT = '.(count(User::all())+1).';');
echo json_encode('User Was Deleted Successfully..');
}
}
jedes mal, wenn ich nach dem löschen eines Benutzers aus der Datenbank habe ich den auto-increment Zeiger auf die Anzahl aller Benutzer +1.
wenn jemand hat eine bessere Lösung informieren Sie mich bitte..
Es ist nie nötig, ändern Sie die auto-Inkrement, wenn das löschen von Datensätzen.
die auto-Inkrement ist nicht entworfen, um als die Anzahl der Elemente in der Tabelle.. es ist eigentlich nur eine eindeutige Kennung. Könnten Sie erklären, warum Sie benötigen, um es zurückzusetzen?
Sie verschwenden Ihre Zeit. Beenden Sie einfach die app.
Ihre Tabelle ist Primärschlüssel haben sollte nichts zu tun mit der Anzahl der Zeilen in der Tabelle. Lassen Sie uns sagen Sie, dass Sie darauf bestehen, versucht diese Arbeit zu machen (die es nicht). Jedes mal, wenn Sie einen Benutzer löschen und Neuindizierung der Tabelle, man müsste dann bei jedem update-Instanz von user-id in jeder anderen Tabelle, in dem Sie erscheinen. Das wäre ein äußerst schlechtes design. Wenn Sie wissen möchten, wie viele Benutzer Sie haben, führen Sie SELECT COUNT(some_colum) VON your_table.
und was wird passieren, wenn Sie 40 Benutzer, und löschen Benutzer mit der id 20... sind Sie gehen zu müssen, zu beschäftigen, einige sehr komplizierte Logik zu finden und aktualisieren alle mit id > 20.. das wird nur gehen, um führen zu Problemen in der Zukunft!
die auto-Inkrement ist nicht entworfen, um als die Anzahl der Elemente in der Tabelle.. es ist eigentlich nur eine eindeutige Kennung. Könnten Sie erklären, warum Sie benötigen, um es zurückzusetzen?
Sie verschwenden Ihre Zeit. Beenden Sie einfach die app.
Ihre Tabelle ist Primärschlüssel haben sollte nichts zu tun mit der Anzahl der Zeilen in der Tabelle. Lassen Sie uns sagen Sie, dass Sie darauf bestehen, versucht diese Arbeit zu machen (die es nicht). Jedes mal, wenn Sie einen Benutzer löschen und Neuindizierung der Tabelle, man müsste dann bei jedem update-Instanz von user-id in jeder anderen Tabelle, in dem Sie erscheinen. Das wäre ein äußerst schlechtes design. Wenn Sie wissen möchten, wie viele Benutzer Sie haben, führen Sie SELECT COUNT(some_colum) VON your_table.
und was wird passieren, wenn Sie 40 Benutzer, und löschen Benutzer mit der id 20... sind Sie gehen zu müssen, zu beschäftigen, einige sehr komplizierte Logik zu finden und aktualisieren alle mit id > 20.. das wird nur gehen, um führen zu Problemen in der Zukunft!
InformationsquelleAutor aimiliano | 2013-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie jeder andere antwortete, es ist nicht wirklich ein Bedürfnis sich zu bewegen den Zähler zurück, wenn Sie eine Zeile löschen. Sie können jedoch
truncate
eine Tabelle, die löscht alle Zeilen der Tabelle und den Zähler zurücksetzen.Können Sie nicht
truncate
eine Tabelle, die hatForeign Key Constraints
angewendet werden (truncate
ist nicht das gleiche wiedelete
die einfach löscht alle Zeilen, während halten die auto-increment-counter.).Daher, während der Verwendung
foreign key constrains
, MySQL stoppen könnte, Sie von abschneiden eine Tabelle, dieforeign key constraints
angewendet.Führen Sie die folgenden Schritte, um zu erreichen, was Sie wollen, aber Vorsicht, es kann ein Risiko für Ihre Daten-Integrität. Ich nur benutze es für meine Testzwecken.
Bearbeiten Sie die
DatabaseSeeder
Klasse (die unterapp/database/seeds/DatabaseSeeder.php
) wie folgt:Nun die Tabelle Seeder Klassen (Beispiel
UserTableSeeder
in diesem Fall, die erstellt werden sollte, beiapp/database/seeds/UserTableSeeder.php
) aufrufen können truncate table(s) wie folgt:Dann können Sie
DB::table('users')->delete();
? 🙂Nein danke, ich denke, u sind der Betreff!
InformationsquelleAutor Abhishek Saini
InformationsquelleAutor Yamakenji
Ich weiß nicht, ob es klug ist oder nicht, aber das wird die Bereinigung der Tabelle.
MySQL setzt den AUTO_INCREMENT letzten+1
Wenn Sie festgelegt haben, um Ihre ausländischen keys ON UPDATE CASCADE werden die Kinder wissen über die änderungen und das update cascade.
Dieses Zeug übernimmt die server-Zeit und gibt wenig zurück. Ich denke, das ist, warum Sie immer sind, Lasten von "nicht Taille Ihre Zeit" Antworten?
Für eine Zählung, die Sie verwenden sollten ->count() und nicht die Letzte-id.
Ich weiß auch nicht, ob die Anweisungen innerhalb einer Transaktion, um Fehler zu vermeiden, wenn Benutzer Hinzugefügt werden, während Sie Ihre Anweisungen ausgeführt werden.
Du meinst seeding? Ich habe nicht eine intelligente Weise, um Saatgut mit laravel. Es ist eine Möglichkeit. Mischen Setzliste und Migrationen ist nach ärger, wenn Sie mich Fragen.
InformationsquelleAutor Joeri