2017-06-29 8 views
1

Ich möchte alle Datensätze in meiner Datenbank mit SQL-Skript mit Artisan aktualisieren. Zum Beispiel muss ich einen solchen Befehl ausführen:Laravel Update Datenbank Datensatz läuft Skript

UPDATE translations SET field = 'meta_desc' WHERE field = 'page_desc' 

Was die Laravel-Struktur wird die beste Lösung sein? Seed, Migrationen, Fabriken?

+1

Verwenden Console Command. Siehe docs https://laravel.com/docs/5.4/artisan#writing-commands –

+0

Ich muss dieses Skript ausführen, um die DB-Änderungen in der DB auf dem Produktionsserver zu implementieren, also, schlagen Sie vor, dass ich jedes Mal den neuen Handwerkerbefehl schreibe Ich möchte etwas an der Produktion ändern? Sorry, aber es ist eine schlechte Lösung für mich ... –

+0

Also, Sie möchten einen Befehl, dessen Inhalt dynamisch ist und führt verschiedene SQL-Abfragen aus. Habe ich Recht? –

Antwort

0

Danke an alle für die Antworten. Dank @RossWilson für seine Idee, Migrationen für die Änderung von DB-Daten zu verwenden.

Aber ich denke, es ist keine gute Lösung, weil das Laravel-Konzept die Verwendung von Migrationen für die DB-Struktur ändert.

Nachdem ich Laravels Handbücher gelesen habe, habe ich festgestellt, dass es eine spezielle Code-Struktur für die Arbeit mit den Daten von db gibt. Es ist ein Seed. So löste ich mein Problem des nächsten Samen für meine Beispielabfrage oben mit:

  1. die neuen Samen Erstellt Handwerker Befehl:

    php artisan make:seed UpdateTranslationsSeeder 
    
  2. Schreiben Sie einen Code innerhalb der Methode run():

    DB::table('translations')->where('field', 'page_desc')->update(['field' => 'meta_desc']); 
    
  3. Führen meine seeder in Handwerkers:

    php artisan db:seed --class=UpdateTranslationsSeeder 
    

Hinweis: Wenn nach dem letzten Befehl in der Konsole ausgeführt Ich habe einen Fehler über Klasse UpdateTranslationsSeeder bekam Lauf der nächste Befehl in der Konsole Laravel zu sagen, über neue Klassen nicht definiert ist:

composer dump-autoload -o