Zend Framework在Zend_Db_Table中使用多数据库问题

燃烧的博客 2011-09-06 12:34:24
使用ZF的Application组件进行MVC的开发,但是在建立Model的时候,选择不同的数据库这里出现了问题。

// application.ini 配置片段
...
resources.multidb.default.adapter = "pdo_mysql"
resources.multidb.default.host = "localhost"
resources.multidb.default.username = "mammy"
resources.multidb.default.password = "daddy"
resources.multidb.default.dbname = "data"

resources.multidb.data.adapter = "pdo_mysql"
resources.multidb.data.host = "192.168.1.5"
resources.multidb.data.username = "root"
resources.multidb.data.password = "123456"
resources.multidb.data.dbname = "data"
resources.multidb.data.port = "3307"
...

我要建立一个访问data源的model,如下

class Application_Model_DbTable_Match extends Zend_Db_Table_Abstract
{

protected $_name = 'match';
protected $_db = 'data';

}

在controller中执行

$table = new Application_Model_DbTable_Match();
var_dump($table->find(234));

出错提示
Fatal error: Call to a member function describeTable() on a non-object in D:\wamp\www\ZendFramework-1.11.10\library\Zend\Db\Table\Abstract.php on line 835

各位朋友遇到过这种问题吗?是如何解决的?
...全文
463 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Ygb_Prince 2011-09-30
这种情况可以参考 Zend_Config这样你就可以得到默认的db
[first]
resources.adapter = "pdo_mysql"
resources.host = "localhost"
resources.username = "mammy"
resources.password = "daddy"
resources.dbname = "data"

[first : one]
resources.adapter = "pdo_mysql"
resources.host = "192.168.1.5"
resources.username = "root"
resources.password = "123456"
resources.dbname = "data"
resources.port = "3307"

然后
$config=new Zend_Config_ini("配置文件路径",'one');
$table = new Application_Model_DbTable_Match();
var_dump($table->find(234));
回复
caravans 2011-09-28
在Bootstrap.php中 加入以下函数
//设置DB配置信息
protected function _initDB(){
$options = $this->getOption('resources');

$resource = $this->getPluginResource('multidb');
$resource->init();
$db1 = $resource->getDb('default');
$db2 = $resource->getDb('data');
Zend_Registry::set('db1', $db1);
Zend_Registry::set('db2', $db2);
Zend_Db_Table::setDefaultAdapter($db1);

}

当前默认db1数据库
需要用db2数据库
在类中加入函数
public function __construct(){
$db2 = Zend_Registry::get('db2');
$this->setDefaultAdapter($db2);
parent::__construct();
}

回复
blackmanII 2011-09-19
需要对多数据库配置;设置一个为默认的。
foreach ($config->db as $config_name => $db) {
$dbAdapters[$config_name] = Zend_Db::factory($db->adapter, $db->toArray());
if($db->adapter != "SQLSRV")
{
$dbAdapters[$config_name]->query("SET NAMES 'utf8'");
}
//self::$registry->database = $dbAdapters[$config_name];
if((boolean)($db->default))
Zend_Db_Table::setDefaultAdapter ($dbAdapters[$config_name]);
}
回复
相关推荐
发帖
Framework
创建于2008-08-27

4245

社区成员

国内外优秀PHP框架讨论学习
申请成为版主
帖子事件
创建了帖子
2011-09-06 12:34
社区公告
暂无公告