Laravel-Samen nach der Migration

Lesezeit: 3 Minuten

Gibt es etwas, das ich in meine Migrationen einfügen kann, um die Tabelle nach Abschluss der Migration automatisch mit Testdaten zu füllen?

Oder tust du haben getrennt säen?

Benutzer-Avatar
Lukasgeiter

Du kannst anrufen migrate:refresh mit dem --seed Option zum automatischen Seeding nach Abschluss der Migrationen:

php artisan migrate:refresh --seed

Dadurch werden alle Ihre Migrationen zurückgesetzt und erneut ausgeführt und anschließend alle Seeder ausgeführt.


Nur als kleines Extra, das Sie auch immer verwenden können Artisan::call() So führen Sie einen handwerklichen Befehl aus der Anwendung heraus aus:

Artisan::call('db:seed');

oder

Artisan::call('db:seed', array('--class' => 'YourSeederClass'));

wenn Sie eine bestimmte Sämaschinenklasse wünschen.

  • Ich habe getan, was Sie gesagt haben, und es war in Ordnung, bis es zur Produktion kommt. Damit friert die Produktion ein. Einzelheiten finden Sie in meiner Frage.

    – Jewgenij Afanasjew

    22. Mai 2018 um 1:49 Uhr


  • Beachten Sie, dass Sie diese Daten verlieren, wenn Sie dies in der Produktion ausführen, nachdem Sie andere Daten als Seed-Daten in DB haben.

    – Manpreet

    5. November 2018 um 5:23 Uhr

Benutzer-Avatar
Manpreet

Wenn Sie vorhandene Daten nicht löschen und nach der Migration ein Seeding durchführen möchten

Die Antwort von Lukasgeiter ist für Testdaten korrekt, wird jedoch nach dem Handwerkerbefehl ausgeführt

php artisan migrate:refresh --seed

in der Produktion aktualisiert Ihre Datenbank und entfernt alle Daten, die vom Frontend eingegeben oder aktualisiert wurden.

Wenn Sie Ihre Datenbank im Rahmen einer Migration mit Seeding versehen möchten (Beispiel: Rollout eines Updates für Ihre Anwendung unter Beibehaltung vorhandener Daten), wie z. B. das Hinzufügen einer neuen Ländertabelle zusammen mit Seed-Daten, können Sie wie folgt vorgehen:

Erstellen Sie ein Datenbank-Seeder-Beispiel YourSeeder.php in database/seeds und Ihre Standorttabellenmigration

class YourTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tablename', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name',1000);
            $table->timestamps();
            $table->softDeletes();
        });

        $seeder = new YourTableSeeder();
        $seeder->run();
    }

    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
        Schema::dropIfExists('tablename');
    }
}

Laufen composer dump-autoload wenn es einen PHP-Klasse-nicht-gefunden-Fehler für die YourTableSeeder-Klasse gibt.

  • Dies sollte imo die akzeptierte Antwort sein. Innerhalb einer Migration ist dies wirklich lesbar. Wenn Sie einen Befehl innerhalb der Migration aufrufen, müssen Sie außerdem das Flag –force hinzufügen, um zu verhindern, dass das System auf Produktionsservern nach einer Bestätigung fragt.

    – Rob Derks

    8. November 2018 um 12:11 Uhr

  • Das ist, wonach ich gesucht habe, eine neue Tabelle mit Standardinhalt, ohne die gesamte Datenbank zu ändern.

    – Lennon

    12. März 2019 um 13:54 Uhr

Benutzer-Avatar
Jason McCreary

Obwohl die Antwort von Lukasgeiter richtig ist, möchte ich Ihre zweite Frage näher erläutern.

Oder muss man separat säen?

Ja. Da du redest Testdaten Sie sollten die Kopplung vermeiden Aussaat mit Migration. Wenn dies keine Testdaten, sondern Anwendungsdaten wären, könnten Sie das Einfügen von Daten natürlich immer zu einem Teil der Migration machen.

Nebenbei, wenn Sie Ihre Daten als Teil von Seeding verwenden möchten testenDu kannst anrufen $this->seed() aus Ihrem Laravel-Testfall.

1216410cookie-checkLaravel-Samen nach der Migration

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

Privacy policy