【发布时间】:2018-03-24 05:04:06
【问题描述】:
鉴于我有以下表格:
- 用户
- 问题
- 标签
- question_tag
my pivot table with two fields: question_id & tag_id
这些是我的模型关系:
用户
public function questions()
{
return $this->hasMany(Question::class);
}
问题
public function user()
{
return $this->belongsTo(User::class);
}
public function tags()
{
return $this->belongsToMany(Tag::class);
}
标签
public function questions()
{
return $this->belongsToMany(Question::class);
}
我已经为每个模型正确设置了数据库模型工厂。
使用我的播种机,这是我想要实现的目标:
- 种子 10 个虚拟用户
- 为每个虚拟用户播种 10 个虚拟问题
- 对于每个虚拟问题,将其与最多 5 个随机标签相关联
为了实现以上三个目标,我编写了如下数据库播种器:
// Seed dummy users
factory(App\User::class, 10)->create()->each(function($user)
{
// With dummy questions
$user->questions()->saveMany(factory(App\Question::class, 10)->make()->each(function($question)
{
// With dummy tags
$question->tags()->sync(factory(App\Tag::class, 5)->make());
}));
});
运行时,我收到以下错误:
[Illuminate\Database\QueryException] SQLSTATE[23000]:完整性 违反约束:1048 列“question_id”不能为空(SQL:i 插入
question_tag(question_id,tag_id) 值 (, 1))[PDOException] SQLSTATE[23000]:违反完整性约束: 1048 列 'question_id' 不能为空
如何在通过数据库模型工厂创建记录的同时为数据透视表播种?
这个问题是 related 我问的另一个问题 - 但现在我遇到了另一个错误。
【问题讨论】:
标签: php database laravel laravel-5 laravel-seeding