我们正在使用带有多个数据库的Zend Framework 2创建一个Web应用程序。我有一个core
数据库,可以加载所有客户的信息。该数据库包含customer
表。客户表的字段是::
当客户登录时,我必须从core
数据库加载他的数据库名称,然后向数据库发出查询请求。
我也没有多个适配器,因为所有客户都有自己的数据库,我必须从customer
的{{1}}表加载!
我以为我会在数据库名称前加上表名。
我在core_db
尝试了这个:
Module.php
我已在我的"CategoryTableGateway" => function ($sm) {
$dbAdapter = $sm->get("Zend\Db\Adapter\Adapter");
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Category());
return new TableGateway("databasename.category", $dbAdapter, null, $resultSetPrototype);
}
中配置了默认数据库,如下所示:
config\autoload\database.global.php
我得到了一个例外:
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=core_db;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
)
然后,我从Base table or view not found: 1146 Table 'core_db.databasename.category' doesn't exist.
删除了dbname=core_db
。
现在,我又得到了另一个例外:
config\autoload\database.global.php
那么我如何在Zend Framework 2中处理这种情况。我是Zend Framework 2的新手。
SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected
:我自己解决了我的问题。
要连接到另一个架构的表,您需要传递Edit
而不是表!
例如,
而不是:
TableIdentifier
你必须这样做:
$CategoryTableGateway = new TableGateway("category", $dbAdapter, null, $resultSetPrototype);
希望它有用!
答案 0 :(得分:-1)
当客户登录时,我必须从核心数据库加载他的数据库名称,然后向数据库发出查询请求。
这就是你做错了。
只需将所有内容保存在单个数据库中,就像世界上的电子商务网站一样。