首页 > 解决方案 > 不是 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 做到这一点?

标签: laravellaravel-5laravel-5.6

解决方案


首先播种您的语言和编程语言表,然后在开发人员播种器中查询记录。

return [ 
   'email' => $faker->unique()->safeEmail, 
    'programming_language_id' => App\ProgrammingLanguage::inRandomOrder()->first()->getKey(), 
    'language_id' => App\Language::inRandomOrder()->first()->getKey()
 ];

推荐阅读