Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用TYPO3 Querybuilder创建动态“WHERE”SQL子句_Typo3_Query Builder - Fatal编程技术网

如何使用TYPO3 Querybuilder创建动态“WHERE”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

如何在TYPO3数据库查询中动态地向“WHERE”子句添加额外条件?新的TYPO3版本8文档说明了如何进行固定查询,而不是可变查询

过去,我可以创建SQL语句并动态修改它,如下所示:

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,非常有帮助,谢谢你的回复。很抱歉延迟回复。