2017-06-02 4 views
0

Ich habe eine zwei Tabellen - Kampagnen und Produkte, die über Fremdschlüssel verbunden sind (product_id)Butzen aus der bestehenden Tabelle mit Fremdschlüssel

Kampagnen

|id| |product_id| |slug|

Produkte

|id| |product_name|

Wie kann ich Schnecken in slug Spalte aus der Tabelle Produkte generieren.

Zum Beispiel Produkt mit product_name = "Pro Evolution Soccer 2017" hat eine id = 1. Wie kann ich den Slug Pro-evolution-soccer-2017-1 in der Campaigns-Tabelle generieren? Wahrscheinlich sollte ich Laravel Helferfunktion str_slug($title, $separator); verwenden, aber ich weiß nicht, wie ...

Btw habe ich ein mehr als 500 000 Produkte, die als Butzen werden müssen erzeugt ...

+0

Warum speichern Sie den 'Slug' in der Campaigns-Tabelle, nicht in der Products-Tabelle? –

+0

Wenn der letzte Teil immer die Produkt-ID ist, warum sollten Sie den Slug lagern? Sie können es im laufenden Betrieb erzeugen und Sie können das Produkt aus dem Slug bekommen. – Jerodev

+0

@ Jerodev Das wäre ideal. Wie kann ich es im laufenden Betrieb erzeugen? – harunB10

Antwort

0

Sie können ein erstellen Befehl, um diesen Job auszuführen documentation

und führen Sie eine Schleife, um alle diese Schnecken über die Befehlszeile zu erstellen und zu speichern.

Auch diese Methode könnte in Zukunft verwendet werden oder planen Sie es häufig auszuführen und füllen Sie die neuen leeren Zeilen.

1

Sie sollten dies wahrscheinlich in der Produkttabelle beim Erstellen und Aktualisieren speichern. Wenn Sie dies einmal in einer separaten Tabelle tun, wird dies zu Problemen führen, wenn/wenn sich Products.product_name ändert.

$product->slug = str_slug($product->product_name, '-'); 

die vorhandenen Einträge zu aktualisieren, können Sie eine Migration schaffen könnte das slug Feld Produkt, dann wählen Sie alle Produkte, durchlaufen sie, und stellen Sie den Wert Slug wie ich oben tat hinzuzufügen.

<?php 

use Illuminate\Support\Facades\Schema; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 
use App\Models\Product; 

class CreateFlightsTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::table('Products', function (Blueprint $table) { 
      $table->string('slug'); 
     }); 

     foreach (Product::all() as $product) { 
      $product->slug = str_slug($product->product_name, '-'); 
      $product->save(); 
     } 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::table('Products', function (Blueprint $table) { 
      $table->dropColumn('slug'); 
     }); 
    } 
} 

Dann nur php artisan migrate von der Kommandozeile.

+0

Ich denke du hast Recht. Ich sollte Schnecken in der Produkttabelle erstellen ... Aber wie kann ich das ohne Migrationen machen? – harunB10

+0

Sie möchten die neue Spalte mit einer Migration hinzufügen, das ist aus mehreren Gründen der richtige Ort dafür. Warum sollte eine Migration nicht verwendet werden? –

+0

Ok, ich habe es mit Migration gemacht, aber Slug-Spalte ist leer. Ich denke, 'Product :: all()' wird nichts holen, da ich mehr als 500 000 Zeilen habe. – harunB10

Verwandte Themen