Сеялка базы данных laravel добавляет случайным образом идентификатор внешнего ключа - PullRequest
1 голос
/ 15 октября 2019

Я пытаюсь создать сеялки для тестирования. У меня есть пользователи, которые принадлежат к комнате через идентификатор комнаты, эти комнаты создаются через сеялку комнаты, в сеансе пользователей я создаю пользователя и обновляю атрибут room_id следующим образом:

factory(App\User::class, 150)->create([
        'host' => false,
        'room_id' =>  App\Room::inRandomOrder()->first()->id
    ]);

Моя проблемавсе ли пользователи, сгенерированные здесь, все получают одинаковый идентификатор комнаты, как действительно получить случайный идентификатор комнаты из базы данных и использовать его в моей сеялке?

Ответы [ 4 ]

0 голосов
/ 15 октября 2019

Попробуйте это. Кроме того, убедитесь, что в таблице комнат есть несколько записей комнаты с автоматическим приращением.

$factory->define(App\User::class, function ($faker) use ($factory)  {
    return [
        'host' => false,
        'room_id' => $factory->create(App\Room::class)->id
    ];
});
0 голосов
/ 15 октября 2019

Попробуйте:

App\Room::all()->random()->id
0 голосов
/ 15 октября 2019
/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    $users = factory(\App\User::class, 150)->create([
        'host' => false,
        'room_id' => $this->getRandomRoomId()
    ]);
}

private function getRandomRoomId() {
    $room = \App\Room::inRandomOrder()->first();
    return $room->id;
}

Попробуйте это. Меня устраивает. Надеюсь, это работает для вас.

0 голосов
/ 15 октября 2019

Вы установили user_id для автоинкрементации?

...