2017-10-23 20 views
1

Laravel 5.5 응용 프로그램에서 관계형 데이터로 테이블을 시드하려고합니다.Laravel eloquent 데이터베이스 시더/팩토리에서 관계형 데이터 시드하기 - 유형 오류 - Arg 1은 Eloquent Model - Collection으로 제공되어야합니다.

나는이 두 테이블/모델이 있습니다

  • 사용자를
  • 질문
  • 응용 프로그램 \ User.php 모델 파일에

; 나는 다음과 같은 hasMany 관계가 있습니다

public function questions() 
{ 
    return $this->hasMany(Question::class); 
} 

을 그리고 여기 내 데이터베이스/공장/

<?php use Faker\Generator as Faker; $factory->define(App\User::class, function (Faker $faker) { static $password; return [ 'name' => $faker->name, 'email' => $faker->unique()->safeEmail, 'password' => $password ?: $password = bcrypt('123456'), 'remember_token' => str_random(10), ]; }); 
QuestionFactory.php

<?php 

use Faker\Generator as Faker; 

$factory->define(App\Question::class, function (Faker $faker) { 
    static $user_id; 

    return [ 
     'user_id' => $user_id, 
     'subject' => $faker->sentence(15), 
     'body' => $faker->paragraph(3) 
    ]; 
}); 

데이터베이스/공장/UserFactory.php

입니다

위의 것을 감안할 때; 나는이처럼 내 더미 데이터 시더에서 모두 사용하려고 :

class DummyDataSeeder extends Seeder 
{ 
    public function run() 
    { 
     // Seed dummy users 
     factory(App\User::class, 10)->create()->each(function($user) 
     { 
      // With dummy questions 
      $user->questions()->save(factory(App\Question::class, 3)->make()); 
     }); 
    } 
} 

The goal was to create 10 dummy users, and for each users to have 3 questions each.

나는 위의 설정으로 데이터베이스를 씨앗 ; 나는 다음과 같은 오류가 점점 오전 :

[Symfony\Component\Debug\Exception\FatalThrowableError] Type error: Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() must be an instance of Illuminate\Database\Eloquent\Model, instance of Illuminate\Database\Eloquent\Collection given, called in C:\xampp\htdocs\myapp.local\database\seeds\DummyDataSeeder.php on line 18

+0

내가 대신 각이 아래에있는 내 대답을 iteration.Check에 대한 여러 기록에'saveMany'를 사용할 필요가 save''생각합니다. –

답변

2

는 다음과 같이하십시오 :

factory(App\User::class, 10)->create()->each(function ($u) { 
    $u->questions()->saveMany(factory(App\Question::class, 3)->make());    
}); 
+0

고마워, 그 속임수를했다. – Latheesan

+0

당신을 도울 수있어서 행복 했어요. 그때 일했다면 대답을 받아 들일 수 있습니다. –

+0

10 분을 기다려야했는데, 어쨌든 지금 받아 들여집니다. – Latheesan