TYPO3 DBAL QueryBuilder跨数据库关联查询实现方法咨询
解决DBAL跨数据库表关联查询的问题
在DBAL的QueryBuilder中,要指定其他数据库的表,直接在表名前加上数据库名+点号即可,也就是用数据库名.表名的格式来引用跨库表。
针对你的代码,只需要把address表的引用改成mdb.address,修改后的代码如下:
private function select(): QueryBuilder { return ($queryBuilder = $this->connectionPool->getQueryBuilderForTable('deployment')) ->select('deployment.*', 'address.*', 'lpt_address.*') ->from('deployment') ->leftJoin( 'deployment', 'mdb.address', // 指定mdb数据库下的address表 'address', $queryBuilder->expr()->eq('address.id', $queryBuilder->quoteIdentifier('deployment.address')) ) ->leftJoin( 'deployment', 'mdb.address', // 同样指定mdb数据库下的address表 'lpt_address', $queryBuilder->expr()->eq('lpt_address.id', $queryBuilder->quoteIdentifier('deployment.lpt_address')) ); }
注意事项
- 确保当前数据库连接的账号拥有访问
mdb数据库中address表的权限,否则会触发权限不足的报错。 - 这种跨库引用方式依赖于数据库本身的支持(MySQL、PostgreSQL等主流关系型数据库均支持),特殊数据库可能需要调整语法。
内容的提问来源于stack exchange,提问作者user3515670
相关产品推荐
相关产品推荐

