2017-05-21 14 views
1

현재 내 ModelFactory.php에, 내가 가진 :Laravel에서 Model Factory 시드 데이터 생성을 위해 Users 테이블에서 임의의 user_id를 검색하려면 어떻게해야합니까?

$factory->define(App\Reply::class, function (Faker\Generator $faker) { 
    return [ 
    'thread_id' => 1, 
    'user_id' => 1, 
    'body' => $faker->paragraph 
    ]; 
}); 

이미 사용자 테이블에 저장된 사용자 ID 중 하나에서 임의의 USER_ID를 생성하고 싶습니다. 나는 데이터 출력을 적절히 표시하는 방법을 모르기 때문에 난처한 상황에 처하게되었고, 어떻게 Laravel이 임의의 사용자 ID를 선택하여 데이터베이스에 삽입 할 수 있는지 궁금했다. 고맙습니다! :)

+0

Eloquent를 사용하지 않음 : http://jan.kneschke.de/projects/mysql/order-by-rand/ –

+1

정확하게 이해했다면 사용자를 생성해야합니다. 1000 사용자가 있다고 가정하면'$ faker-> numberBetween (1, 1000),'또는 random_int (1, 1000)'을 사용할 수 있습니다. –

+0

나는 옵션이 무엇인지 생각하고 있었다. :) –

답변

4

다음을 시도해보십시오.

use App\User; // Assuming this is your User Model class with namespace. 

$factory->define(App\Reply::class, function (Faker\Generator $faker) { 
    return [ 
    'thread_id' => 1, 
    'user_id' => User::all()->random()->user_id, 
    'body' => $faker->paragraph 
    ]; 
}); 

테이블의 모든 사용자 데이터를 가져온 다음 임의로 ID를 선택한다는 점을 기억하십시오. 따라서 테이블에 엄청난 양의 데이터가있는 경우에는 권장되지 않습니다. 대신 테스트 케이스에서 (자체 공장을 통해) 새 사용자를 만들고 위의 팩토리에서 생성 된 Reply 객체에 id를 할당 할 수 있습니다.

위의 공장 정의에서 특정 사용자를 쿼리 할 수 ​​있습니다.

'user_id' => User::where('username', 'like', '[email protected]')->get()->random()->user_id 

DB에 테스트 사용자를 설정하면 모든 사용자 데이터를 가져 오지 않습니다.

+0

'App \ User;를 사용하여 입력했습니다.' ModelFactory.php 파일의 맨 위에 있지만 php artisan db : seed가 실행될 때 'user_id'가 none으로 표시됩니다. 내가 뭘 잘못하고 있습니까? –

+0

연결중인 DB에 이미 사용자 데이터가 있습니까? 그렇지 않다면 - factory (App \ User :: class, 5) -> create();를 사용하여 시드 할 수 있습니다. 그래서 몇몇 사용자 데이터가있을 것입니다. 답장 데이터를 시드하기 전에 사용자 데이터를 시드해야합니다. – ayip

+0

예, 사용자 ID가 51-131에서 미리 생성되었습니다. 그래서 나는 그 번호 사이에서 무작위로 생성 된 user_id를 얻을 수 있기를 정말로 바라고 있습니다. 지금 나는 'user_id'=> factory ('App \ User') -> all() -> random() -> user_id와 같은 것을 시도하고있다. 미안하지만, 나는 조금 멍청하다. :) –