2017-05-11 5 views
1

私はfakerを使用してDBをシードしています。Laravel faker - バージョン管理をシミュレートするためのレコードを追加するループ

$factory->define(App\Product::class, function (Faker\Generator $faker) { 

    $campaign = factory(App\Campaign::class)->create(); 
    $size= $faker->randomElement($array = array ('728x90','300x250','315x315', '715x425', '750x650')); 


    return [ 
     'campaign_id' => $campaign->campaign_name, 
     'size' => $size, 
     'product_id' => $campaign->campaign_name."_".$size, 
     'version' => $faker->randomElement($array = array ('1','2','3', '4', '5')), 


    ]; 
}); 

私が興味を持っているのはバージョンフィールドです。私がしたいのは、1と5の間の乱数を生成し、データベースにそのレコードの数を入力することです。

したがって、製品は「バージョン」の数に応じて1と5のエントリになる可能性がありますベネが作成されました。

これは可能ですか?

私は運がないリターン配列の周りに単純なforループを試みました。

答えて

0

異なるバージョンの同じ製品に対して複数のエントリを作成するとします。モデルファクトリを使用して、単一のモデルエントリを作成できます。シーダーで直接フェイカーを使用して、期待していることを達成することができます。最も簡単な解決策の

$campaign = factory(App\Campaign::class)->create(); 
$size= $faker->randomElement($array = array ('728x90','300x250','315x315', '715x425', '750x650')) 

$max_version = $faker->randomElement($array = array ('1','2','3', '4', '5')); 

for ($version=0; $version < $max_version; $version++) { 
    Product::create([ 
     'campaign_id' => $campaign->campaign_name, 
     'size' => $size, 
     'product_id' => $campaign->campaign_name."_".$size, 
     'version' => $version, 
    ]); 
} 
0

一つ、あなたのテストクラスではこのような何かをファクトリメソッド(または形質)を作成することで、あなたはポイントを取得します:)

public function createProduct() 
{ 
    $product = factory(Product::class)->create(); 

    foreach(range(0, $product->version) as $i) { 
     factory(Version::class)->create([ 
      'product_id' => $product->id 
     ]); 
    } 

    return $product; 
} 
関連する問題