2016-10-02 9 views
0

저는 Laravel을 처음 사용했으며 개의 공장 인을 사용하여 피벗 테이블을 시드하는 좋은 방법을 찾고 있습니다. 평범한 씨를 뿌리는 사람은 사용하고 싶지 않습니다. 나는 세 개의 테이블 (사용자, 기술user_skill)가Laravel의 공장을 사용하여 피벗 테이블을 시드하십시오.

: 나는 당신에게 사건을 보여 드리겠습니다.

users    user_skill     skills 
+----------------+ +----------------------+ +-----------------+ 
| id | name  | | user_id | section_id | | id | skills | 
+----------------+ +----------------------+ +-----------------+ 
| 1 | Alex  | |   |   | | 1 | draw  | 
|----------------| |----------------------| |-----------------| 
| 2 | Lucy  | |   |   | | 2 | program | 
|----------------| |----------------------| |-----------------| 
| 3 | Max  | |   |   | | 3 | social | 
|----------------| |----------------------| +-----------------+ 
| 4 | Sam  | |   |   | 
+----------------+ +----------------------+ 

피벗 테이블을 시드 실제 Id '의 Users (사용자) 테이블의 실제 Id'스킬 테이블의의를 취할 수있는 좋은 방법이 있나요? 임의로 처리하고 싶지만 임의의 ID와 일치하지 않는 임의의 숫자는 원하지 않습니다. Id가 사용자스킬과 일치하도록하겠습니다.

나는 시작하는 법을 모르며, 나는 좋은 본보기를 찾고있다. 어쩌면이게 뭔가?

$factory->defineAs(App\User::class, 'userSkills', function ($faker) { 
    return [ 
     'user_id' => ..? 
     'skills_id' => ..? 
    ]; 
}); 

답변

3

나는 이것이 최선의 방법이라고 생각하지 않지만 저에게는 효과적이라고 생각합니다.

$factory->define(App\UserSkill::class, function (Faker\Generator $faker) { 
    return [ 
     'user_id' => factory(App\User::class)->create()->id, 
     'skill_id' => factory(App\Skill::class)->create()->id, 
    ]; 
}); 

피벗 테이블 용 모델을 만들지 않으려면 수동으로 삽입 할 수 있습니다.

DB::table('user_skill')->insert(
    [ 
     'user_id' => factory(App\User::class)->create()->id, 
     'skill_id' => factory(App\Skill::class)->create()->id, 
    ] 
); 

또는 임의의 기존 값이 있습니다.

DB::table('user_skill')->insert(
    [ 
     'user_id' => User::select('id')->orderByRaw("RAND()")->first()->id, 
     'skill_id' => Skill::select('id')->orderByRaw("RAND()")->first()->id, 
    ] 
); 
+0

그러나 이렇게하면 피벗 테이블 'user_skill'에 대한 모델 'UserSkill'을 만들어야합니까? 그리고 이것은 꼭 필요한 것은 아닙니까? '사용자'와 '기술'테이블의 현재 '아이디'를 가져 와서 세이블을 시드 할 방법이 없습니까? –

+0

내 새로운 대답을 확인하십시오, 그것이 당신에게 효과가 있기를 바랍니다. –

+0

이봐, 이건 시험하기에 충분하다. –