سؤال

هل من الممكن القيام بانضمام قاعدة بيانات متقاطعة في دروبال؟

قل أن لديك قواعدت بيانات ، drupal و old_data_source. هل تريد الإنضمام drupal.node ل old_data_source.page.

db_set_active() يمكن استدعاؤها لاستخدام قواعد بيانات متعددة. ومع ذلك ، لا يمكن العثور على أي شيء عن جدول قاعدة البيانات المتقاطع!

(أنا أبحث في هذا كجزء من برنامج نصي للهجرة وسوف أقوم بإزالته old_data_source)

هل كانت مفيدة؟

المحلول

Drupal لا يدعم وجود أكثر من قاعدة بيانات نشطة في وقت واحد. السبب الرئيسي هو على الأرجح أن هذه ميزة MySQL محددة.

يمكنك القيام بذلك باستخدام PHP وتخطي طبقة قاعدة بيانات Drupal. نظرًا لأنه فقط من أجل البرنامج النصي للترحيل الذي يجب تشغيله مرة واحدة ، سيكون من الجيد جعل قاعدة بيانات التعليمات البرمجية محددة. نحن فقط mysql_ connect الخ. ربما تكون فكرة جيدة لإنهاء استخدامها db_set_active

نصائح أخرى

هناك خدعة غير معروفة لإنجاز هذا ، والتي تعتمد على ميزة تسمى بادئة الجدول. يمكنك تكوين الإعدادات الخاصة بك.

إلقاء نظرة على الأمثلة في تعليقات default.settings.php (ينطبق بناء جملة مماثل في Drupal 6) لمعرفة كيفية إعداد هذا. في حالة السؤال الأصلي ، سيكون لديك مجموعة بادئة على إدخال قواعد بيانات $ الافتراضية التي تبدو:

'prefix' => array('page' => 'old_data_source.'),

ثم قم ببناء استعلام بشيء مثل:

db_query("SELECT * FROM {node} n LEFT JOIN {page} p on n.nid=p.nid");

ستقوم طبقة التجريد DRUPAL DB بتفسير {page} وتحويلها إلى SQL مثل:

SELECT * FROM node n LEFT JOIN old_data_source.page p on n.nid=p.nid;

الشيء الآخر الوحيد الذي يجب التأكد منه هو أن مستخدم قاعدة البيانات المرتبط بقاعدة بيانات DRUPAL الافتراضية لديك امتيازات للوصول إلى كلتا قواعد البيانات ، أو أن هذه الخدعة لن تعمل.

أود فقط أن أضيف إلى هذه الإجابة ، لأنني واجهت هذه المشكلة بنفسي مؤخرًا. كان الحل الأسهل إلى حد بعيد (في حالتي) هو إنشاء mysql رأي فعل الانضمام وراء الكواليس. هذا يلغي الحاجة إلى قاعدة البيانات المتقاطعة في Drupal نفسها.

بالإضافة إلى استخدام البادئة في الإعدادات. تم الإشارة إلى خدعة php أمامي ، يمكنك أيضًا ترميز البادئة في سلسلة الاستعلام التي تنتقل إليها إلى db_query () (على غرار ما فعلته في سؤالك).

لذلك في هذه الحالة لديك

drupal.node inner join old_data_source.page on blablabla

تم اختباره على D7.

بالطبع يجب أن يكون لدى المستخدم الذي تستخدمه في الوسيطة DB_SET_ACTION الوصول إلى كلتا قواعد البيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top