2017-09-27 8 views
0

어떻게 TYPO3 데이터베이스 쿼리의 'WHERE'절에 추가 조건을 동적으로 추가 할 수 있습니까? 새로운 TYPO3 버전 8 문서는 고정 된 쿼리를 만드는 방법을 말하지만 가변 쿼리는 만들지 않습니다. TYPO3 Querybuilder를 사용하여 동적 '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

deadfishli 님, 매우 도움이되고 친절하게 답장 해 주셔서 감사합니다. 응답이 늦어서 죄송합니다. –

답변

2

해결되었습니다. 저의 실수는 Query 빌더 명세서의 여러 부분이 모여 야한다고 생각하는 것입니다.

그래서이 :

$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();