如何使用TYPO3 Querybuilder创建动态“WHERE”SQL子句
如何在TYPO3数据库查询中动态地向“WHERE”子句添加额外条件?新的TYPO3版本8文档说明了如何进行固定查询,而不是可变查询 过去,我可以创建SQL语句并动态修改它,如下所示:如何使用TYPO3 Querybuilder创建动态“WHERE”SQL子句,typo3,query-builder,Typo3,Query Builder,如何在TYPO3数据库查询中动态地向“WHERE”子句添加额外条件?新的TYPO3版本8文档说明了如何进行固定查询,而不是可变查询 过去,我可以创建SQL语句并动态修改它,如下所示: if (condition) { $strWhere = 'some SQL'; } else { $strWhere = 'same SQL with extra bits'; } $dbRes = $GLOBALS['TYPO3_DB']->exec_SELECTgetRo
if (condition) {
$strWhere = 'some SQL';
} else {
$strWhere = 'same SQL with extra bits';
}
$dbRes = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
"*", // SELECT ...
"tableName", // FROM ...
$strWhere , // WHERE...
etc.
我不知道如何使用Querybuilder来做这样的事情。我想要实现的是一个表达式,它可以做这样的事情
if (condition) {
->where($queryBuilder->expr()->eq(... ))
}
else {
->where($queryBuilder->expr()->eq(... ))
->andWhere($queryBuilder->expr()->eq(... ))
}
如有任何提示,将不胜感激。谢谢。问题解决了。我的错误是认为查询生成器语句的各个部分必须结合在一起,而事实并非如此 因此:
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tablename');
$queryBuilder
->select('uid', 'header', 'bodytext')
->from('tt_content')
->where(
$queryBuilder->expr()->eq('bodytext', $queryBuilder->createNamedParameter('klaus')),
$queryBuilder->expr()->eq('header', $queryBuilder->createNamedParameter('a name'))
)
->execute();
也可以拆分为多个部分,例如:
switch ($scope) {
case 'limitfields':
$queryBuilder->select('uid','header','bodytext');
break;
default:
$queryBuilder->select('*');
break;
}
$queryBuilder
->from('tt_content')
->where(
$queryBuilder->expr()->eq('bodytext', $queryBuilder->createNamedParameter('klaus')),
$queryBuilder->expr()->eq('header', $queryBuilder->createNamedParameter('a name'))
)
->execute();
解决了。我的错误是认为查询生成器语句的各个部分必须结合在一起,而事实并非如此 因此:
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tablename');
$queryBuilder
->select('uid', 'header', 'bodytext')
->from('tt_content')
->where(
$queryBuilder->expr()->eq('bodytext', $queryBuilder->createNamedParameter('klaus')),
$queryBuilder->expr()->eq('header', $queryBuilder->createNamedParameter('a name'))
)
->execute();
也可以拆分为多个部分,例如:
switch ($scope) {
case 'limitfields':
$queryBuilder->select('uid','header','bodytext');
break;
default:
$queryBuilder->select('*');
break;
}
$queryBuilder
->from('tt_content')
->where(
$queryBuilder->expr()->eq('bodytext', $queryBuilder->createNamedParameter('klaus')),
$queryBuilder->expr()->eq('header', $queryBuilder->createNamedParameter('a name'))
)
->execute();
跟你说的差不多。您可以在一个数组中收集多个where条件$queryBuilder->expr,然后使用orX或andX连接它们:$queryBuilder->andWhere$queryBuilder->expr->orX…$YourWhere Expressions;谢谢deadfishli,非常有帮助,谢谢你的回复。很抱歉耽搁了你的回复。跟你刚才说的差不多。您可以在一个数组中收集多个where条件$queryBuilder->expr,然后使用orX或andX连接它们:$queryBuilder->andWhere$queryBuilder->expr->orX…$YourWhere Expressions;谢谢deadfishli,非常有帮助,谢谢你的回复。很抱歉延迟回复。