laravel - 不是 laravel 5 db:seed 中的关系
问题描述
我有三个模型
开发者模型:
迁移:
$table->increments('id');
$table->string('email')->unique();
$table->unsignedInteger('programming_language_id');
$table->unsignedInteger('language_id');
$table->timestamps();
和功能
class Developer extends Model
{
public function programming_languages() {
return $this->hasMany('App\ProgrammingLanguage');
}
public function languages() {
return $this->hasMany('App\Language');
}
}
编程语言模型:
迁移:
$table->increments('id');
$table->string('name')->unique();
$table->timestamps();
和功能:
protected $table = 'programming_languages';
public function developers() {
return $this->belongsToMany('App\Developer');
}
语言模型:
迁移:
$table->increments('id');
$table->string('code', 30)->unique();
$table->timestamps();
和功能:
public function developers() {
return $this->belongsToMany('App\Developer');
}
我想制作数据库播种机并成为它们之间的关系。我怎样才能做到这一点?我正在尝试:创建工厂DeveloperFactory
$factory->define(App\Developer::class, function (Faker $faker) {
return [
'email' => $faker->unique()->safeEmail,
'programming_language_id' => function () {
return factory(App\ProgrammingLanguage::class)->create()->id;
},
'language_id' => function () {
return factory(App\Language::class)->create()->id;
}
];
});
种子好的,但它没有任何关系。只需播种数据。
我如何通过 db:seed 做到这一点?
解决方案
首先播种您的语言和编程语言表,然后在开发人员播种器中查询记录。
return [
'email' => $faker->unique()->safeEmail,
'programming_language_id' => App\ProgrammingLanguage::inRandomOrder()->first()->getKey(),
'language_id' => App\Language::inRandomOrder()->first()->getKey()
];
推荐阅读
- typescript - 将 Angular 4.4 更新为 6 后缺少 TypeScrypt 编译错误
- matlab - 获取逻辑向量中的最后 x 个项目(为真)
- java - 使用java在字符串中搜索连字符
- delphi - 如何确定 TSysCharSet(AnsiChar 集)是否未分配?
- python - 比较两个文本文件并输出差异+找到记录的文件的名称
- linux - 使用 'sed' 删除行首和行尾的空格
- c# - 通过 Dapper 在 OracleConnection 对象上设置 ClientID
- android - 哪些应用使用 Intent.EXTRA_HTML_TEXT?
- javascript - Node.js puppeteer - 在循环中使用数组中的值来循环浏览页面
- node.js - 尽管提示没有价值,但谷歌身份验证总是要求授权