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