Aktualisieren Sie die Tabelle und fügen Sie Daten in einer Laravel 5-Migration hinzu

Lesezeit: 3 Minuten

Benutzer-Avatar
Derich Lima

Ich muss eine neue Spalte in meinem Laravel-Projekt hinzufügen, kein Problem dafür, ich habe die Schema::table() zu aktualisieren und es ist ok. Jetzt muss ich herausfinden, wie viele Datensätze ich in dieser Tabelle habe, und sie mit einem Wert aktualisieren.

Ich habe den Tisch Warrants:

Schema::create('warrant_grants', function(Blueprint $table) {
    $table->increments('id');
    $table->integer('warrant_plan_id');
    $table->integer('shareholder_id');
});

Also habe ich das neue Feld mit einer neuen Migrationsdatei erstellt:

Schema::table('warrant_grants',function ($table) {
    $table->string('name',100);
});

Jetzt muss ich dieses Feld aktualisieren name in der Tabelle mit einigen Werten, zum Beispiel wenn die Tabelle 100 Datensätze hat, dann muss ich in jede Zeile den Wert “Warrant-X” einfügen, wobei X eine Zahl ist, die mit 1 bis 100 beginnt. Zum Beispiel:

Optionsschein-1, Optionsschein-2, …. Optionsschein-100.

Ich habe Stunden damit verbracht, nach einer Möglichkeit zu suchen, dies mit Seeds zu tun, aber ich habe nichts gefunden. Also im Grunde habe ich zwei Fragen:

  • Kann ich Seeds in Laravel 5 verwenden, um Werte zu aktualisieren, oder kann ich sie einfach einfügen?
  • Kann ich innerhalb der Seeds (oder Migrationen) SQL erstellen, um dieses Update für mich durchzuführen?

  • Sie können Werte bei der Migration aktualisieren.

    – Shalu Singhal

    27. Mai 2016 um 8:31 Uhr

Benutzer-Avatar
Derich Lima

Basierend auf diesem Link habe ich die Antwort gefunden: https://stackoverflow.com/a/23506744/4650792

Schema::table('warrant_grants',function ($table){
        $table->string('name',100)->after('id')->nullable();
    });

    $results = DB::table('warrant_grants')->select('id','name')->get();

    $i = 1;
    foreach ($results as $result){
        DB::table('warrant_grants')
            ->where('id',$result->id)
            ->update([
                "name" => "Warrant-".$i
        ]);
        $i++;
    }

Danke trotzdem für die Hilfe Jungs.

Andere Antworten sind richtig. Beachten Sie jedoch, dass das Aktualisieren aller Datensätze mit ORM einige Zeit in Anspruch nehmen kann, wenn Sie viele Datensätze haben. Verwenden Sie rohe SQL-Abfragen, um dies schneller zu erledigen.

Schema::table('warrant_grants',function ($table){
        $table->string('name',100)->after('id')->nullable();
    });
DB::raw("UPDATE warrant_grants SET name=name+id");

Die SQL-Abfrage ist nicht exakt und Sie müssen sie für Ihre eigene Datenbank erstellen, aber Sie verstehen, worauf es ankommt.

  • Eigentlich wäre es die richtige Methode, einen SQL-Befehl auszuführen DB::statement statt DB::raw

    – Emmanuel S.

    24. März 2021 um 10:07 Uhr

Benutzer-Avatar
Oliver Maximović

Ja, Sie können Aktualisierungen/Einfügungen/was auch immer in Ihren Migrationen durchführen. Zum Beispiel:

Schema::table('warrant_grants', function($table) {
    $table->string('name', 100);
});

$i = 1;
foreach (WarrantGrants::all() as $warrant_grant) {
    $warrant_grant->update([
      'name' => 'Warrant-' . $i
    ]);

    $i++;
}

  • Im Allgemeinen ist es keine gute Idee, Modelle in Ihren Migrationen zu verwenden, da sich dieses Modell in Zukunft ändern kann. Das könnte Ihre Migrationen unterbrechen. Überprüfen Sie die Antwort von Deric Lima zur Verwendung von Low-Level-Abfragen ohne Verwendung von Laravel-Modellen.

    – Patrik Fuhrmann

    6. November 2018 um 12:27 Uhr

Eine weitere mögliche Syntax, um dies zu erreichen:

DB::table('warrant_grants')
   ->where('id',$result->id)
   ->update([
      "name" => DB::raw("'Warrant-' + `name`")
   ]);

Dadurch kann die Aktualisierung in einem Stapel durchgeführt werden, anstatt über Ergebnisse zu iterieren, und der größte Teil der vertrauten Eloquent-Syntax bleibt erhalten, anstatt nur auf die Verwendung von rohem SQL zurückzugreifen.

Je nach verwendeter SQL-Variante muss ggf. die String-Concatenation-Syntax geändert werden.

1176200cookie-checkAktualisieren Sie die Tabelle und fügen Sie Daten in einer Laravel 5-Migration hinzu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy