আমি কীভাবে একাধিক ডাটাবেস সংযোগ স্থাপন করতে পারি?


12

দ্রুপাল 8 এ একাধিক ডাটাবেস সংযোগের সাথে সংযোগ স্থাপনে কেউ আমাকে সহায়তা করতে পারে? আমার একই সার্ভারে ডাটাবেস রয়েছে এবং আমি এটি ডিফল্ট ড্রুপাল 8 ডাটাবেসের সাথেও অ্যাক্সেস করতে চাই।


আপনার settings.php ফাইলে ডাটাবেসের তথ্য যোগ করুন এবং আপনি ব্যবহার করে বিভিন্ন ডাটাবেসের মধ্যে সুইচ করতে পারেন drupal.org/node/2204083

হাই @ ইভানজারোস দয়া করে এটিকে উত্তর হিসাবে যুক্ত করা বিবেচনা করুন কারণ এটি প্রশ্নের উত্তর দেয় না।
ডিজিটাল

উত্তর:


13

এটি ড্রুপাল 7 এর মতোই করা হয়, আপনি নিজের সেটিংস.এফপি ফাইলটিতে ডাটাবেস শংসাপত্রগুলি যুক্ত করতে পারেন।

$databases['default']['default'] = array(
  'database' => 'drupal8',
  'username' => 'username',
  'password' => 'password',
  'prefix' => '',
  'host' => 'localhost',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
);

$databases['external']['default'] = array(
  'database' => 'external',
  'username' => 'username',
  'password' => 'password',
  'prefix' => '',
  'host' => 'localhost',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
);

আপনার কাছে এখন দুটি সংযোগ বিকল্প থাকবে, ডিফল্ট এবং বাহ্যিক। আপনি তাদের ব্যবহার করে এগুলির মধ্যে স্যুইচ করতে পারেন:

// Switch to external database
\Drupal\Core\Database\Database::setActiveConnection('external');
// Do queries...

// Switch back
\Drupal\Core\Database\Database::setActiveConnection();

আপনি এই সুইচগুলি কোথায় তৈরি করবেন ... উদাহরণস্বরূপ স্থানীয় থেকে উত্পাদনে।
টিকাএল

@ টিকাএল 13 আপনি যখন বাইরের উত্স থেকে / থেকে ডেটা আনতে / লাগাতে চান তখন আপনি স্যুইচ করেন এবং যখন ফ্যাচ / পুটটি সম্পন্ন করেন আপনি ফিরে যান।
googletorp

@googletorp যখন অভ্যন্তরীণ সার্ভার ত্রুটি ৫০০ এর চেয়ে বেশি বাহ্যিক ডাটাবেস উপলব্ধ না থাকে boot কীভাবে পরিতৃপ্তি ছাড়তে পারে? অনেক অনেক ধন্যবাদ
মুদাসসর আলী

@ মুদাসসারআলি আপনি চেষ্টা / ধরার বিবৃতিতে কিছু করতে সক্ষম হবেন যেখানে আপনি প্রকৃত ডাটাবেস স্যুইচ করেছেন। এটি এমন কোনও ত্রুটি নয় যার সাথে আমি পরিচিত তবে কী ঘটেছিল তা নিশ্চিত নয়
googletorp

1
সক্রিয় সংযোগ পরিবর্তন করা প্রয়োজন নয়। পরিবর্তে, ব্যবহার করুন Database::getConnection('external')এবং বৈশ্বিক রাষ্ট্রের সাথে ঝামেলা এড়ান।
পিয়েরে বুয়েল

5

বহিরাগত ডাটাবেস ব্যবহার করে একটি ডাটাবেস সংযোগ পুনরুদ্ধার করা ছাড়াও , সংযোগটি নির্ভরতা হিসাবে পুনরুদ্ধার করতে এবং আপনার মডিউলের পরিষেবাদি ওয়াইএএমএল ফাইলে আপনার সংযোগ ঘোষণা করার জন্য আপনি নিজের কোডে নির্ভরতা ইনজেকশনটিDatabase::getConnection() ব্যবহার করতে পারেন :

database.external:
  class: Drupal\Core\Database\Connection
  factory: 'Drupal\Core\Database\Database::getConnection'
  arguments: ['external']

external_database_dependent_service:
  class: Drupal\MODULE\Some\Class\For\A\ServiceUsingTheExternalDatabase
  arguments: ['@database.external']

এটি একটি দুর্দান্ত কৌশল, তবে আপনার নিজের অনুসন্ধানগুলি নিজেই করা দরকার do আপনার যদি ড্রুপাল অভ্যন্তরীণ ফাংশনগুলিকে সত্তা লোড করা এবং সত্তাগুলি সংরক্ষণ করার মতো জিনিস করতে দেয় তবে এটি কাজ করবে না (এফএক্স যদি সাইটের সামগ্রী ভাগ করে নিয়ে থাকে)
googletorp

দ্রুপালের ডিবি ড্রুপাল নিজেই পরিচালিত হয়, সত্তা সিস্টেমটি আপনার বেশিরভাগ সামগ্রীর টেবিল পরিচালনা করে। ড্রুপাল ডাটাবেস স্তরে সামগ্রী ভাগ করে নেওয়া হয় না। এটি করা খুব ভঙ্গুর বলে মনে হচ্ছে (যেমন, আমি নিয়ন্ত্রণ করতে পারি না এমন অনেকগুলি বিষয়ের উপর নির্ভর করে)। এমনকি আলফাতেও , ড্রুপাল.আর / প্রজেক্ট / রেপ্লিকেশন জাতীয় কিছুটি অনেক বেশি নিরাপদ বলে মনে হচ্ছে।
পিয়েরে বুয়েল

1
এটি একটি দুর্দান্ত সমাধান, তবে আমি লক্ষ্য করেছি যে কমপক্ষে 8.3 হিসাবে আপনি বিপরীত ক্রমে সংযোগ কারখানায় আমার প্রত্যাশার চেয়ে দুটি পরামিতি সরবরাহ করতে হবে: যুক্তি: ['ডিফল্ট', 'বাহ্যিক']
অ্যাক্রোসম্যান

2

আপনাকে অনেক ধন্যবাদ, @ গুগলটর!

এখানে আরও একটি সম্পূর্ণ উদাহরণ - নোড তৈরি করেছেন এমন ডি 7 ডাটাবেস থেকে ব্যবহারকারীদের নির্বাচন করার জন্য আমার কোড:

\Drupal\Core\Database\Database::setActiveConnection('external');

// Get a connection going
$db = \Drupal\Core\Database\Database::getConnection();

$query = $db->select('users', 'u');
$query->fields('u', array('uid', 'name'));
$query->join('node', 'n', 'n.uid = u.uid');
$query->orderBy('uid');
$users = $query->execute()->fetchAllKeyed();

\Drupal\Core\Database\Database::setActiveConnection();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.