2013-10-15 28 views
0

我正在開發一個自定義組件multishop爲Joomla 2.5。我知道,這是一個很大的工作,但我就可以了,一切都運作良好的時刻;)的Joomla 2.5 - 多個數據庫查詢通過API

我處理2個數據庫:

  • 的高手,其中包含產品的所有主要信息,與經典的結構(產品,類別,產品類別的關係,製造商...)
  • 奴隸,只包含本地信息(產品&一些定製的東西,如售價爲這個特殊的店)。

對主或本地數據庫創建查詢的過程是確定的。一個簡單的getDbo()的本地數據庫,並像

$masterdb = & JDatabase::getInstance($master_options); 

但對於法師的getInstance分貝與陣列中新PARAMS: 如果我想使這兩個DBS之間的「交叉詢問」使用連接什麼?如:

SELECT * 
FROM slave_db.mytable 
LEFT JOIN master_db.othertable 
ON slave_db.mytable.column_name=master_db.othertable.column_name; 

Joomla框架允許嗎?

如果沒有,我想我可以寫出硬編碼的請求,從joomla的框架方式做到這一點......但我不太喜歡這個主意......或者我可能會做單獨的請求和工作只在PHP中比較/合併/重組數組......但它也很糟糕!

請幫忙! ;)

+0

恐怕Joomla!對此沒有核心解決方案。您需要擴展DBO或使用純PHP編寫自己的外部查詢。 – di3sel

回答

1

OK,這是我如何實現這樣做! 這是有點偷偷摸爬,但它的作品...

// For Master DB calls. 
$master_options['driver'] = MASTER_DRIVER; 
$master_options['host']  = MASTER_HOST; 
$master_options['user']  = MASTER_USER; 
$master_options['password'] = MASTER_PASSWORD; 
$master_options['database'] = MASTER_DB; 
$master_options['prefix'] = MASTER_PREFIX; 
$masterdb = JDatabase::getInstance($master_options); 

$query = $masterdb->getQuery(true); 

//slave infos 
$app   = JFactory::getApplication(); 
$slave_prefix = $app->getCfg('dbprefix'); 
$slave_name  = $app->getCfg('db'); 

$query = "SELECT * 
FROM `".$slave_name."`.`".$slave_prefix."mytable` 
LEFT JOIN `".$master_options['database']."`.`".$master_options['prefix']."othertable` 
ON `".$slave_name."`.`".$slave_prefix."mytable`.`column_name`=`".$master_options['database']."`.`".$master_options['prefix']."othertable`.`column_name`"; 

$masterdb->setQuery((string)$query);