एलोकेंट / धाराप्रवाह का उपयोग करके एक ही क्वेरी से कई पंक्तियाँ कैसे डालें


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

एलोक्वेंट या क्वेरी बिल्डर का उपयोग करके लारवेल में एक बल्क इंसर्ट करना वास्तव में आसान है।

आप निम्नलिखित दृष्टिकोण का उपयोग कर सकते हैं।

$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 () विधि का उपयोग करें।
कृशनिक हसनज

35
यह टाइमस्टैम्प सम्मिलित नहीं करता है।
guy_fawkes

20
अपने सरणी में 'create_at' => दिनांक ('Ymd H: i'), 'संशोधित_at' => दिनांक ('Ymd H: i: s') जोड़ें। स्रोत: stackoverflow.com/a/26569967/1316842
JR टैन

8
मुझे आश्चर्य है कि लारवेल के पास इसके लिए 'createMany' जैसा कुछ क्यों नहीं है।
अभिषेक

4
मैं आईडी कैसे पुनः प्राप्त करूं?
लवविस

21

वाक्पटु का उपयोग करना

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

Model::insert($data);

सम्मिलित करना क्वेरी बिल्डर की विधि है। एक्सेसर और म्यूटेटर इस इंसर्ट के साथ काम नहीं करेंगे
हसन दाद खान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.