2016-10-02 7 views
0

Я новичок в Laravel, и я ищу хороший способ засевать сводную таблицу, используя фабрики. Я не хочу использовать простые сеялки. Я покажу вам случай:Семена сводной таблицы с заводами в Ларавеле

У меня есть три таблицы (пользователей, навыков и user_skill).

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 «S таблицы пользователей и реальные Id» S из таблицы Skills семян сводной таблицы? Я хочу сделать это случайным образом, но мне не нужны случайные числа, которые не соответствуют ни одному идентификатору. Я хочу, чтобы идентификатор совпал с пользователями и навыков.

Я не знаю, с чего начать, и я ищу хороший пример. Может, что-то вроде этого?

$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

Но таким образом вам нужно создать модель 'UserSkill' для сводной таблицы' user_skill'? И это не нужно правильно? Невозможно засеять этот соболь, просто беря текущие 'id' из таблиц' users' и 'skills'? –

+0

Проверьте мой новый ответ, надейтесь, что он сработает. –

+0

Эй, это работает достаточно для тестирования. –