2017-09-27 19 views
0

TYPO3データベースクエリのWHERE句に余分な条件を動的に追加するにはどうすればよいですか?新しいTYPO3 Version 8のドキュメントでは、固定クエリを作成する方法を説明しますが、可変クエリは作成しません。過去にはTYPO3クエリビルダを使用して動的 'WHERE' SQL文を作成する方法

、私は、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(...)) 
} 

ヒントがあれば幸いです。ありがとう。

+0

ほとんど。配列内の条件($ queryBuilder-> expr())をいくつか収集し、orXまたはandXを使ってそれらを接続することができます: $ queryBuilder-> andWhere($ queryBuilder-> expr() - > orX(..) 。$ yourWhereExflressions); – deadfishli

+0

死者のおかげで、とても助かりました。あなたは応答するのが大好きです。応答が遅れて申し訳ありません。 –

答えて

2

解決済み。私の間違いは、Query Builderステートメントのさまざまな部分が一緒に来なければならないと考えていたことです。

ので、この:

$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(); 
0
$queryBuilder = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Database\\ConnectionPool')->getQueryBuilderForTable('tx_igldapssoauth_config'); 

$expressionBuilder = $queryBuilder->expr(); 

$conditions = $expressionBuilder->andX(); 
$conditions->add(
    $expressionBuilder->eq('somefield', 1) 
); 
$conditions->add(
    $expressionBuilder->eq('someotherfield', 2) 
); 

$rows = $queryBuilder->select('*') 
->from('tx_igldapssoauth_config') 
->where(
    $queryBuilder->expr()->eq('uid', 1) 
) 
->andWhere($conditions) 
->execute()->fetchAll(); 
関連する問題