我正在将我的组件从Joomla 1.7升级到Joomla 3.3并且必须保留原始数据库。因此,我需要从另一个数据库访问显示数据作为安装数据库。我尝试过一种方法,之前我曾经多次使用过Joomla 2.5,但似乎这次我无法正确使用它。
在getListQuery()
方法的模型中(它覆盖了modellist方法)我使用以下代码从我想要获取数据的位置访问数据库:
$dbOptions = getDbOptions();
$db = & JDatabase::getInstance($dbOptions);
我的旧数据库的连接详细信息包含在$dbOptions
。
我继续使用以下代码:
$query = $db -> getQuery(true);
$query -> select('*') -> from('table');
return $query;
我在开头包含以下内容:
jimport('joomla.application.component.modellist');
modellist扩展了JModelLegacy,因此我相信它使用以下内容:
/libraries/legacy/model/list.php
但它给我一个错误,表newDatabase.table没有退出,因此我使用的方法没有连接到我的旧数据库以从oldDatabase.table检索数据。
我不确定是否包含jimport('joomla.application.component.modellist');
,可能是问题吗?
任何可以帮助从原始数据库中检索数据的人都可以使用
答案 0 :(得分:2)
如果同一服务器上的旧数据库和活动的mysql用户有权访问它,你可以使用这样的SQL查询:
$query = $db -> getQuery(true);
$query -> select('*') -> from('old_database.table');
return $query;
答案 1 :(得分: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()中的数据库。 E.g。
$db = JFactory::getDbo();
答案 2 :(得分:1)
我相信Adam 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();
会给你错误的数据库,你应该这样做:
self:getDbo();
答案 3 :(得分: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);
我能够很好地连接到另一个数据库。