You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

TYPO3 8.x使用Query Builder时出现ConnectionPool未找到异常求助

解决TYPO3 8中找不到ConnectionPool类的异常

问题根源

TYPO3的ConnectionPool类是从TYPO3 9 LTS才开始引入的新数据库连接管理类,而你用的是TYPO3 8,这个版本里根本不存在这个类,所以会触发"类未找到"的异常。

解决方案

在TYPO3 8中,你需要使用旧版的DatabaseConnection类来获取QueryBuilder,具体修改步骤如下:

1. 替换引入的类

把原来的ConnectionPool引入替换为DatabaseConnection

// 替换前
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;

// 替换后
use TYPO3\CMS\Core\Database\DatabaseConnection;
use TYPO3\CMS\Core\Utility\GeneralUtility;

2. 修改QueryBuilder的获取逻辑

DatabaseConnection实例来获取QueryBuilder,而不是ConnectionPool:

public function getItems($Variable1,$Variable2) {
    // 获取数据库连接实例
    $dbConnection = GeneralUtility::makeInstance(DatabaseConnection::class);
    // 获取对应表的QueryBuilder
    $queryBuilder = $dbConnection->getQueryBuilderForTable('tx_xxxxxx');
    
    // 后续的select逻辑保持不变,举个完整示例:
    $statement = $queryBuilder
        ->select('*')
        ->from('tx_xxxxxx')
        ->where(
            $queryBuilder->expr()->eq('your_field1', $queryBuilder->createNamedParameter($Variable1)),
            $queryBuilder->expr()->like('your_field2', $queryBuilder->createNamedParameter('%' . $Variable2 . '%'))
        )
        ->execute();
    
    // 处理查询结果
    $items = $statement->fetchAll();
    return $items;
}

额外提醒

  • 如果你之后升级到TYPO3 9+版本,再把代码切换回ConnectionPool的方式即可,那时候旧的DatabaseConnection会被标记为废弃。
  • 不管是TYPO3 8还是新版本,使用QueryBuilder时一定要用createNamedParameter绑定参数,避免SQL注入风险,这一点是通用的。

内容的提问来源于stack exchange,提问作者Karthik

火山引擎 最新活动