我正在尝试使用 Zend Framework 2 在放置在不同数据库中的两个表之间进行联接。
第一个表称为users并存储在数据库中admin
第二个表称为等级制度并存储在数据库中customer
我在 global.php 中加载数据库适配器
return array(
'admin' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=admin;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
'customer' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=customer;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter'
=> 'Zend\Db\Adapter\AdapterServiceFactory',
),
),
);
但是当我尝试使用此函数加入 UserDao 时:
public function getSelect(Hierarchy $hierarchy) {
$select = $this->tableGateway->getSql()->select();
$select->where(array('level' => $hierarchy()->getId()));
$select->join(array('h' => 'hierarchies'), 'h.id = users.idHierarchy', array('hierarchyId' => 'id', 'level' => 'level'));
return $select;
}
这会生成这个 SQL 语句:
SELECT "users".*, "h"."id" AS "hierarchyId", "h"."level" AS "level" FROM "users" INNER JOIN "hierarchies" AS "h" ON "h"."id ”=“用户”。“idHierarchy”其中“级别”=“1”
但当我尝试使用它时它会抛出此异常:
Zend\Db\Adapter\Exception\InvalidQueryException
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'admin.hierarchies' doesn't exist
我尝试在连接中指示数据库的名称,如下所示:
$select->join(array('h' => 'customer.hierarchies'), 'h.id = users.idHierarchy', array('hierarchyId' => 'id', 'level' => 'level') );
但它也会抛出这个异常:
SQLSTATE[42S02]:未找到基表或视图:1146 表“admin.customer.hierarchies”不存在
我发现这个网站解释了如何做到这一点,但它仅对 Zend Framework 1 有效,而我正在使用 Zend Framework 2。
在 Zend Framework 中使用不同的数据库
有人可以帮助我吗?请。
Thanks!