【问题标题】:Not being relationships in laravel 5 db:seed不是 laravel 5 db:seed 中的关系
【发布时间】:2018-05-17 05:27:04
【问题描述】:

我有三个模型
Developer 模型:
迁移:

$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');
  }
}

ProgrammingLanguage 模型:
迁移:

$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');
}

我想制作 db 播种机并成为它们之间的关系。我怎样才能做到这一点? 我正在尝试:创建工厂 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;
    }
 ];
});

seed 可以,但它不会建立任何关系。只需播种数据。
我如何通过 db:seed 做到这一点?

【问题讨论】:

    标签: laravel laravel-5 laravel-5.6


    【解决方案1】:

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

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

    【讨论】:

    • 种子正常。但我的开发者控制器索引函数:$developers = Developer::find(1); return $developers->languages; 显示错误。
    • 你的开发者模型属于语言和编程语言,将hasMany改为belongsTo
    • 如果您现在遇到路由问题,我建议您提出一个新问题,因为您最初提出的关于数据库播种的问题已得到解答。它将让更多人有机会留下有意义的答案。如果是这种情况,请将答案标记为已接受。
    • 我已经表明我的问题 db 种子是可以的。但它没有任何关系,并且在问题中也提到了。
    • 您的回答很有用。但它并没有让我出局。
    猜你喜欢
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    相关资源
    最近更新 更多