Legen Sie den Start des Auto-Increment-Felds bei 1000 in Migration Laravel 5.1 fest
Lesezeit: 4 Minuten
Anshul Mishra
Ich muss meine IDs von 1000 in der Benutzertabelle starten, wie könnte ich dafür eine Migration erstellen.
Meine aktuelle Migration ist:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id'); // how can I start this from 1000
$table->integer('qualification_id')->nullable();
$table->integer('experience_id')->nullable();
});
}
Für Laravel 8+ gibt es eine neuer Modifikator du kannst sowas machen $table->id()->from(1000); Ich verstehe diese Frage für 5.1
– Salam
30. September 2020 um 15:32 Uhr
So sollte es sein (nicht getestet).
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
class MyTableMigration extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$statement = "ALTER TABLE MY_TABLE AUTO_INCREMENT = 111111;";
DB::unprepared($statement);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
}
Aktualisieren
//Your migrations here:
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id')->unsigned();
$table->integer('qualification_id')->nullable();
$table->integer('experience_id')->nullable();
});
//then set autoincrement to 1000
//after creating the table
DB::update("ALTER TABLE users AUTO_INCREMENT = 1000;");
Ich habe diese Zeile unter meiner Migration eingefügt, es wurde ein Fehler ausgegeben: The use statement with non-compound name 'DB' has no effect
– Anshul Mishra
10. Dezember 2015 um 7:47 Uhr
Ich denke, Sie verwenden DB oben (verwenden Sie DB;). Deshalb erhalten Sie diesen Fehler. Entfernen Sie ihn einfach, und ich habe meine Antwort aktualisiert.
– Benutzer5456506
10. Dezember 2015 um 8:12 Uhr
Dies funktioniert nicht für alle Datenbanken. Beispiel, funktioniert nicht für sqlite.
– Abkrim
23. November 2016 um 17:35 Uhr
Wenn Sie dies in einer SQLite-Datenbank verwenden möchten, verwenden Sie DB::update("UPDATE SQLITE_SEQUENCE SET seq = $num WHERE name = '$table'") wobei $num Ihre neue letzte Inkrementnummer und $table die Tabelle ist. sqlite.org/autoinc.html
– Abkrim
23. November 2016 um 17:49 Uhr
In Laravel 8 können Sie verwenden from() nur für MySQL / PostgreSQL:
Legen Sie den Startwert eines automatisch inkrementierenden Felds fest (MySQL/PostgreSQL)
$table->id()->from(...);
Dies startingValue() -Methode funktioniert auch, aber ich habe dies nirgendwo in der Dokumentation erwähnt.
$table->id()->startingValue(...);
Unter der Haube für mysql verwendet es:
public function compileAutoIncrementStartingValues(Blueprint $blueprint)
{
return collect($blueprint->autoIncrementingStartingValues())->map(function ($value, $column) use ($blueprint) {
return 'alter table '.$this->wrapTable($blueprint->getTable()).' auto_increment=".$value;
})->all();
}
$table->id()->from(1000); fügt die Daten-ID ab 1000 ein
– Mohammed Raza
18. März um 18:23 Uhr
Migration zum Erstellen einer Tabelle und Festlegen des Autoinkrementwerts ab Laravel 5.5
public function up()
{
Schema::create("users', function (Blueprint $table) {
$table->increments('id');
$table->integer('qualification_id')->nullable();
$table->integer('experience_id')->nullable();
});
// Here's the magic
\DB::statement('ALTER TABLE table_name AUTO_INCREMENT = 1000;');
}
DB::statement() kann verwendet werden, um jede einzelne SQL-Anweisung auszuführen, die Sie benötigen.
Was ist, wenn ich viele Spalten mit inkrementiertem Datentyp in derselben Tabelle habe, zum Beispiel product_id, counter_id, und ich nur den Startwert für counter_id festlegen möchte, wirkt sich dies auch auf product_id aus?
– Hussam Adil
4. September 2019 um 11:33 Uhr
Der Zähler wird auf Tabellenebene definiert. Sie können in MySQL nicht mehrere AUTO_INCREMENT-Spalten in einer Tabelle haben, daher ist das, was Sie fragen, nicht möglich.
– Kapitän Hypertext
4. September 2019 um 11:47 Uhr
Tschallacka
Die meisten Tabellen arbeiten mit Inkrementen, die von der nächstgrößten ganzen Zahl aus inkrementiert werden.
Man kann immer eine Ganzzahl einfügen, die höher ist als der aktuelle Autoincrementing-Index. Der automatisch inkrementierende Index folgt dann automatisch ab diesem neuen Wert +1 aufwärts.
Wenn Sie also eine frisch erstellte Tabelle haben, ist Ihr aktueller Index 0, der nächste Schlüssel ist 0 + 1 = 1.
Was wir wollen, ist ein Primärschlüssel, der bei 1000 beginnt, also fügen wir einen Datensatz mit dem ID-Wert 999 ein, sodass die nächste Einfügung 1000 wird.
und jetzt haben Sie eine leere Tabelle, in der die nächste Insert-ID 1000 sein sollte.
Bitte beachten Sie, dass, wenn Sie Werte in die Tabelle mit ID-Werten < startId das musst du machen Vor Sie führen diese Anweisungen aus. Andernfalls gibt die Datenbank einen Constraint-Violation-Fehler aus.
Dies sollte datenbankunabhängig funktionieren, aber wenn es eine Datenbank gibt, die dieser Autoincrement-Regel nicht folgt, würde ich gerne davon hören.
Knall T
//Your migrations here:
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id')->unsigned();
$table->integer('qualification_id')->nullable();
$table->integer('experience_id')->nullable();
});
//then set autoincrement to 1000
//after creating the table
DB::update("ALTER TABLE users AUTO_INCREMENT = 1000;");
Wir müssen eine Präfixtabelle hinzufügen. Also müssen wir die Leitung ersetzen
Für Laravel 8+ gibt es eine neuer Modifikator du kannst sowas machen
$table->id()->from(1000);
Ich verstehe diese Frage für5.1
– Salam
30. September 2020 um 15:32 Uhr