2017-06-02 29 views
0

外部キーを使用して既存の表のうち、スラグを作成する - 外部キーを介して接続されているキャンペーンや製品(product_id私は2つのテーブル持って

キャンペーン

|id| |product_id| |slug|

製品

|id| |product_name|

slugカラムに製品番号のテーブルにスラグを生成する方法を教えてください。

たとえば、product_name = "Pro Evolution Soccer 2017"の商品は、id = 1です。キャンペーンテーブルにスラッグPro-evolution-soccer-2017-1を生成するにはどうすればよいですか?おそらく、あなたが作成することができます私はLaravelヘルパー関数str_slug($title, $separator);を使用する必要がありますが、私は

がところで私はナメクジのように生成する必要がある500の以上の000の製品を持っているかわからない... ...

+0

「商品」テーブルではなく、「キャンペーン」テーブルに「スラッグ」を保存するのはなぜですか? –

+0

最後の部分が常に商品IDであれば、スラッグの保管はどうしてですか?あなたは即座にそれを生成することができ、あなたはスラッグから製品を得ることができます。 – Jerodev

+0

@Jerodevそれは理想的でしょう。どうやってそれを生成できますか? – harunB10

答えて

0

このジョブを実行するコマンドdocumentation

そしてループを実行して、これらのすべてのslugをコマンドラインで作成して保存します。

また、このメソッドは将来使用できます。また、頻繁に実行して新しい空の行を埋めるようにスケジュールすることもできます。

1

作成と更新の製品表にこれを保存してください。別のテーブルでこの作業を行うと、Products.product_nameが変更されたときに問題が発生します。

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

既存のアイテムを更新するには、あなたは、製品にslugフィールドを追加し、すべての製品を選択し、それらを反復処理し、私が上記したようスラッグ値を設定するには、移行を作成することができます。

<?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'); 
     }); 
    } 
} 

次にコマンドラインからphp artisan migrateと入力してください。

+0

あなたが正しいと思います。私はProductsテーブルにスラグを作成する必要があります...しかし、私はどのように移行せずにこれを行うことができますか? – harunB10

+0

新しい列をマイグレーションで追加したい場合は、さまざまな理由でこれを行うのが適切です。なぜマイグレーションを使いたくないのですか? –

+0

さて、私は移行でそれをしましたが、スラグの列は空です。私は 'Product :: all()'は500,000以上の行を持っているので何も取得しないと思います。 – harunB10

関連する問題