我正在尝试使用 Zend Framework 2 在放置在不同数据库中的两个表之间进行连接。
第一个表称为users并存储在数据库admin中
第二个表称为层次结构,存储在数据库客户中
我在 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" WHERE "级别" = '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。
有人可以帮我吗?请。
谢谢!