웅변 / 유창성을 사용하여 단일 쿼리에서 여러 행을 삽입하는 방법


143

다음과 같은 쿼리가 있습니다.

  $query = UserSubject::where('user_id', Auth::id())->select('subject_id')->get();

예상대로 다음과 같은 결과가 나타납니다.

[{"user_id":8,"subject_id":9},{"user_id":8,"subject_id":2}]

위의 결과를 다른 테이블 에 복사하여 내 테이블이 다음과 같이 보이도록하는 방법이 있습니까?

ID|user_id|subject_id
1 |8      |9
2 |8      |2

내가 가진 문제 $query는 행 수를 예상 할 수 있으므로 알 수없는 행 수를 반복하는 방법을 모릅니다.


누군가가 여전히 필요로하는 경우 : github.com/laravel/framework/issues/1295#issuecomment-193025045
4givN

답변:


292

Eloquent 또는 쿼리 빌더를 사용하여 Laravel에서 대량 삽입을 수행하는 것이 실제로 쉽습니다.

다음 방법을 사용할 수 있습니다.

$data = [
    ['user_id'=>'Coder 1', 'subject_id'=> 4096],
    ['user_id'=>'Coder 2', 'subject_id'=> 2048],
    //...
];

Model::insert($data); // Eloquent approach
DB::table('table')->insert($data); // Query Builder approach

귀하의 경우 이미 $query변수 내에 데이터가 있습니다 .


7
오브젝트 콜렉션에서-> toArray () 메소드를 사용하십시오.
Kreshnik Hasanaj

35
타임 스탬프를 삽입하지 않습니다.
guy_fawkes

20
'created_at'=> date ( 'Ymd H : i : s'), 'modified_at'=> date ( 'Ymd H : i : s')를 배열에 추가하십시오. 출처 : stackoverflow.com/a/26569967/1316842
JR Tan

8
Laravel에 왜 'createMany'와 같은 것이 없는지 궁금합니다.
Abhishek

4
ID를 어떻게 검색합니까?
루비아

21

Eloquent 사용

$data = array(
    array('user_id'=>'Coder 1', 'subject_id'=> 4096),
    array('user_id'=>'Coder 2', 'subject_id'=> 2048),
    //...
);

Model::insert($data);

insert는 쿼리 작성기의 방법입니다. 접근 자와 뮤 테이터는이 인서트와 함께 작동하지 않습니다
Hassan Dad Khan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.