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

各位朋友遇到过这种问题吗?是如何解决的?
...全文
520 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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]);
}

4,250

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧