วิธีแทรกหลายแถวจากแบบสอบถามเดียวโดยใช้คำพูดที่ไพเราะ / คล่องแคล่ว


150

ฉันมีคำถามต่อไปนี้:

  $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สามารถคาดหวังจำนวนแถวใด ๆ และฉันไม่แน่ใจว่าจะวนซ้ำผ่านจำนวนแถวที่ไม่รู้จักได้อย่างไร


คำตอบ:


306

การแทรกจำนวนมากใน Laravel เป็นเรื่องง่ายมากโดยใช้ Eloquent หรือตัวสร้างแบบสอบถาม

คุณสามารถใช้แนวทางต่อไปนี้

$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

36
ไม่แทรกการประทับเวลา
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
ฉันจะดึงรหัสได้อย่างไร?
Luvias

23

ใช้ Eloquent

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

Model::insert($data);

1
แทรกเป็นวิธีการสร้างแบบสอบถาม Accessor และ mutators จะไม่ทำงานกับส่วนแทรกนี้
Hassan Dad Khan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.