2017-08-03 76 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_IDRESOURCE_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 ..