2015-05-15 4 views
6

इस तरह हम Laravel है, जो एक पीएचपी फ्रेमवर्क है के साथ कई DB कनेक्शन को संभाल नहीं अजगर (सोचता है कि किसके लिए है कि यह एक डुप्लिकेट पोस्ट है)निष्पादित करने के लिए कैसे करें Laravel Eloquent के साथ विभिन्न सर्वर पर मौजूद कई डेटाबेस के बीच प्रश्नों में शामिल हों?

<?php 
return array(

    'default' => 'mysql', 

    'connections' => array(

     # Our primary database connection 
     'mysql' => array(
      'driver' => 'mysql', 
      'host'  => 'host1', 
      'database' => 'database1', 
      'username' => 'user1', 
      'password' => 'pass1' 
      'charset' => 'utf8', 
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
     ), 

     # Our secondary database connection 
     'mysql2' => array(
      'driver' => 'mysql', 
      'host'  => 'host2', 
      'database' => 'database2', 
      'username' => 'user2', 
      'password' => 'pass2' 
      'charset' => 'utf8', 
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
     ), 
    ), 
); 

और यह कैसे आप इस से कनेक्ट है डेटाबेस।

$user1 = User::on('mysql1')->where(/* ... */)->get() 
$user2 = User::on('mysql2')->where(/* ... */)->get() 

ये केवल चयन प्रश्न हैं। इसलिए स्पष्ट रूप से काम करता है।

हालांकि, जब मैं निष्पादित करना चाहता हूं तो इन 2 डेटाबेस के बीच क्वेरी ऑपरेशन जॉइन करना संभव नहीं है।

+0

आप मूल रूप से नहीं कर सकते हैं (यह फीडरेटेड स्टोरेज इंजन के साथ संभव हो सकता है लेकिन मैं इसके लिए झुका नहीं सकता) – GordonM

+0

[MySQL का संभावित डुप्लिकेट - पाइथन का उपयोग कर विभिन्न सर्वरों पर डेटाबेस के बीच जुड़ता है?] (Http: // stackoverflow.com/questions/5832787/mysql-joins-between- डेटाबेस-on- अलग- सर्वर-using-python) – GordonM

+0

@ गॉर्डनएम यह एक PHP ढांचा है जो एक फीटन फ्रेमवर्क और इलोकेंट नहीं है। मुझे लगता है कि फीटन के पास भी वांछित नहीं है। इसलिए, एक डुप्लिकेट होना असंभव है। केवल लेखन के उद्देश्य के लिए कुछ मत लिखो। – SNaRe

उत्तर

0

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

हालांकि, आप कच्ची अभिव्यक्ति (https://github.com/laravel/framework/blob/8865d2276be94f0a3497ba3bd26c906ae9e91e1c/src/Illuminate/Database/Query/Expression.php#L13) या इस तरह की smth का उपयोग करने का प्रयास कर सकते हैं, लेकिन आपको क्वेरी परिणाम से मॉडल बनाने के लिए कोड लिखना होगा।

आप laravel 4 का उपयोग करते हैं इस सवाल मदद कर सकते हैं: Laravel 4: how to run a raw SQL?

+0

http://laravel.com/docs/5.0/queries#raw-expressions मैं कच्ची विधि देखता हूं लेकिन जब मैं इसका उपयोग करता हूं तो मैं इन 2 डेटाबेस कनेक्शन नामों को अपने कच्चे एसक्यूएल कोड में कैसे जोड़ूं? मैं कच्चे एसक्यूएल के साथ ठीक हूँ। मुझे बस इसे हल करना होगा। – SNaRe

+0

इस तरह की यादें मुझे लगता है: http://stackoverflow.com/questions/17132206/laravel-4-read-config-files – aeryaguzov

0

एक कच्चे क्वेरी लिखें और उपयोग डीबी तरीकों laravels डेटा से बचने के लिए।

$results = DB::select(DB::raw("SELECT Users.id, Properties.name FROM [Database1].[dbo].[Users] join [Database2].[dbo].[Properties] on Users.id = Properties.user_id where [so].[dbo].[Users].id = :user_id"), array('user_id' => Input::get('user_id', -1))); 
0

यदि ये 2 डेटाबेस विभिन्न सर्वर पर हैं, तो आप ऐसा नहीं कर सकते हैं। कम से कम नहीं। मैंने storage engine के बारे में पढ़ा। लेकिन मैंने पहले कभी ऐसा करने की कोशिश नहीं की है।

लेकिन

वहाँ डेटाबेस एक ही सर्वर पर हैं, तो आप एक साधारण में शामिल होने के साथ यह कर सकते हैं यदि उपयोगकर्ता सही अनुमति है!

संबंधित मुद्दे