2017-08-03 24 views
0

私はLaravelに関して質問がありますモデル工場、私は次の工場の定義があります。 Laravelモデルの工場belongsTo関係が動作しない

$factory->define(Video::class, function (Faker\Generator $faker) { 
    return [ 
     "title"   => $faker->unique()->text, 
     "description" => $faker->text(), 
     "created_at" => $faker->dateTimeThisYear 
    ]; 
}); 

は、基本的に、このモデルは、コンテンツリソーステーブルを有する2つのbelongsTo関係を有しており、そのようなCONTENT_IDとして定義し、カラムRESOURCE_ID。

私は、このシーダーがコンテンツとリソースを作成し、それを作成する前にビデオモデルにアタッチすることを期待しています。

factory(Video::class, 50)->create()->each(function($item) { 
     /** @var $item Video */ 
     $item->content()->associate(factory(Content::class)->create()); 
     $item->resource()->associate(factory(Resource::class)->create()); 
    }); 

しかし、これは動作しません、と私はvideosテーブルの上にCONTENT_ID外部キーに関するエラーが発生します。私はここで間違って何をしていますか?すべてのヘルプは大歓迎です:)私はこのようにそれを行うだろう

答えて

1

はモデルのための工場を作成し、私はあなたのビデオクラスはアプリケーションの下に名前空間と仮定しています

$factory->define('App\Content', function(Faker\Generator $faker) { 
    return [ 
     'body' => $faker->paragraph 
    ]; 
}); 

$factory->define('App\Resource', function(Faker\Generator $faker) { 
    return [ 

    ]; 
}); 

$factory->define('App\Video', function (Faker\Generator $faker) { 
    return [ 
     "title"   => $faker->unique()->text, 
     "content_id" => function() { 
      return factory('App\Content')->create()->id; 
     }, 
     "resource_id" => function() { 
      return factory('App\Resource')->create()->id; 
     }, 
     "description" => $faker->text(), 
     "created_at" => $faker->dateTimeThisYear 
    ]; 
}); 

新工場からそれらを参照します。あなたのクラスが名前空間でない場合、あなたはApp namespacceを削除することができます..

関連する問題