2014-06-13 121 views
0

我正在將我的組件從Joomla 1.7升級到Joomla 3.3,並且必須保留原始數據庫。因此我需要從另一個數據庫訪問顯示數據作爲安裝數據庫。我嘗試了一種我之前用Joomla 2.5多次使用過的方法,但這次我似乎無法正確使用它。從Joomla 3.2+的另一個數據庫訪問數據

在我的getListQuery()方法(覆蓋modellist法)模型,我用下面的代碼訪問從那裏我想我的數據的數據庫:

$dbOptions = getDbOptions(); 
$db = & JDatabase::getInstance($dbOptions); 

在我的舊的連接細節數據庫包含在$dbOptions中。

我繼續使用下面的代碼:

$query = $db -> getQuery(true); 
$query -> select('*') -> from('table'); 
return $query; 

我不包括在開始執行以下操作:

modellist延伸JModelLegacy,因此我相信,它使用下列內容:

/libraries/legacy/model/list.php 

但它給了我一個錯誤,表newDatabase.table不會退出nd因此我正在使用的方法不會連接到我的舊數據庫以從oldDatabase.table中檢索數據。

雖然我不確定是否包含jimport('joomla.application.component.modellist');,可能會出現問題嗎?

任何人都可以幫助從我的原始數據庫中檢索數據?

回答

1

如果整個模型僅從外部數據庫獲取數據,則可以使用JDatabase-> setDbo將默認數據庫對象替換爲您的自定義數據庫對象。

public function __construct($config = array()) 
{ 
    parent::__construct($config); 

    $options = array(); 
    $options['driver'] = 'mysqli'; 
    $options['host']  = 'localhost'; 
    $options['user']  = 'username'; 
    $options['password'] = 'password'; 
    $options['database'] = 'database'; 
    $options['prefix'] = 'jos_'; 

    $db = JDatabase::getInstance($options); 
    parent::setDbo($db); 
} 

現在您應該可以像使用默認數據庫一樣訪問getListQuery()中的數據庫。例如。

$db = JFactory::getDbo(); 
+0

Adam B @請大家幫忙我是joomla的新手,讓我知道我在哪裏寫這段代碼 –

+0

這取決於你想要這個數據的地方。你想達到什麼目的? –

2

如果同一服務器和積極的MySQL用戶對舊的數據庫有訪問它,你可以使用這樣的SQL查詢:

$query = $db -> getQuery(true); 
$query -> select('*') -> from('old_database.table'); 
return $query; 
+0

這將工作,但最好在我的情況下使用其他答案,因爲我有很多模型,我可以將數據庫的細節放在一個文件中,這使得它更容易出於多種原因,特別是當我有再次移動組件。 – jmarais

1

我相信亞當B的代碼可以有一定的改善,對於設置DB。

public function __construct($config = array()) 
{ 
    $options = array(
     'driver' => 'mysqli', 
     'host'  => 'localhost', 
     'user'  => 'username', 
     'password' => 'password', 
     'database' => 'database', 
     'prefix' => 'jos_' 
    ); 

    //parent construct will handle setting the DB 
    $config['dbo']=JDatabase::getInstance($options); 

    parent::__construct($config); 
} 

並獲得DB:我認爲JFactory::getDbo();會給你錯了DB,你應該做的:

self:getDbo(); 
0

使用Joomla 2.5,這種方式爲我工作:

$option = array(); 
    $option['driver'] = 'mysql'; 
    $option['host']  = 'localhost'; 
    $option['user']  = 'XXXXXXXX'; 
    $option['password'] = 'XXXXXXXX'; 
    $option['database'] = 'wordpress'; 
    $option['prefix'] = 'jtt_'; 
    $db = JDatabase::getInstance($option); 
    $query = "select * from #__categories"; 
    $db->setQuery($query); 

我能夠很好地連接到另一個數據庫。

相關問題