2016-05-07 15 views
5

मैं Laravel में एक से दूसरे डेटाबेस से रिकॉर्ड के सबसेट कॉपी करने की जरूरत है 4.2Laravel 4.2: एक और

मैं एक कारीगर काम है कि मॉडल है कि मैं नकल करने की जरूरत लोड करता है लिखा है करने के लिए एक डेटाबेस से डेटाबेस रिकॉर्ड की प्रतिलिपि बनाना "डिफ़ॉल्ट" डेटाबेस कनेक्शन से, और अब उन्हें दूसरे डेटाबेस कनेक्शन (जिसे config/database.php में परिभाषित किया गया है) में सहेजने की आवश्यकता है। जो मुझे नहीं मिल रहा है वह डिफ़ॉल्ट कनेक्शन के अलावा किसी अन्य डेटाबेस में सहेजने के लिए मॉडल की सेव() विधि का उपयोग करने का कोई तरीका है।

क्या यह संभव है? क्या मैं अपने डेटाबेस को दूसरे डेटाबेस कनेक्शन में "धक्का" दे सकता हूं? या मुझे "पुल" तर्क में बदलने की ज़रूरत है, मेरी डेटाबेस कनेक्शन परिभाषाओं को उलट दें, और "डिफ़ॉल्ट" में सहेजने से पहले "दूसरा" कनेक्शन से डेटा लोड करें?

उत्तर

1

@Filip के रूप में संकेत दिया है,: उदाहरण के एक mysql है)।

हालांकि, id को शून्य तक सेट करना भी आवश्यक है (जब तक कि आप सुनिश्चित न हों कि उस डेटाबेस के साथ कोई रिकॉर्ड दूसरे डेटाबेस पर मौजूद नहीं है, जो मैं नहीं कर सकता) यह सुनिश्चित करने के लिए कि एक नया वृद्धि आईडी मूल्य आवंटित किया जाएगा।

और यह सहेजने से पहले पर मॉडल की exists संपत्ति सेट करने के लिए भी आवश्यक है। स्रोत डेटाबेस से रिकॉर्ड पढ़ने के बाद मॉडल में यह मान true है, क्योंकि रिकॉर्ड सफलतापूर्वक वहां से पढ़ा गया था (नए रिकॉर्ड के रूप में बनाए जाने के बजाए)। exists को रीसेट करने में विफल होने के परिणामस्वरूप लार्वेल UPDATE WHERE id = $model->id निष्पादित करने का प्रयास कर रहा था, जो डेटाबेस में कुछ भी नहीं लिखता था, क्योंकि अद्यतन करने के लिए कोई मिलान रिकॉर्ड (शून्य आईडी के साथ) नहीं था। exists से false सेट करना सुनिश्चित करता है कि सहेजने को INSERT के रूप में निष्पादित किया जाता है।

1

सबसे पहले आप secoundary उदाहरण के लिए connections में app/conifg/database.php में कनेक्शन और फिर परिभाषित करने के लिए है: - यह बचाने -

'second_db_conn' => [ 
     'driver' => 'mysql', 
     'host'  => $_SERVER['MYSQL_HOST'], 
     'database' => $_SERVER['MYSQL_DATABASE'], 
     'username' => $_SERVER['MYSQL_USERNAME'], 
     'password' => $_SERVER['MYSQL_PASSWORD'], 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
    ], 

फिर yout मॉडल पर इस संबंध सेट (में और डिफ़ॉल्ट के लिए वापस स्विच मेरी यह मॉडल सहेजने से पहले दूसरा (गंतव्य) डेटाबेस के लिए मॉडल पर कनेक्शन स्थापित करने के लिए आवश्यक है

$model->setConnection('second_db_conn')->save(); 
$model->setConnection('mysql'); 
+1

धन्यवाद, मैं आखिरकार काम कर रहा था कि मुझे मॉडल में कनेक्शन सेट करने की आवश्यकता है .... सिवाय इसके कि मुझे पता चला कि इसने आईएनएसईआरटी के बजाय एक अद्यतन लेनदेन निष्पादित करने का प्रयास किया .... समाधान स्पष्ट रूप से ' 'save() 'करने से पहले $ model-> मौजूद = झूठा' है, अन्यथा 'मौजूद' संपत्ति पहले डेटाबेस कनेक्शन से पढ़ने से हमेशा सच थी, इसलिए लार्वेल ने इसे अद्यतन के रूप में माना और यूपीडेटिंग रिकॉर्ड तक काम नहीं करेगी पहले से ही दूसरे डेटाबेस पर मौजूद है –