Получить записи базы данных в TYPO3 viewHelper - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу создать запрос к базе данных в помощнике вида, это работает со следующим кодом:

$uid = 11;

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_test_domain_model_author');
$query = $queryBuilder
    ->select('*')
    ->addSelectLiteral(
      $queryBuilder->expr()->count('tx_test_domain_model_author.author', 'counter')
    )
    ->from('tx_test_domain_model_author')
    ->join(
      'tx_test_domain_model_author',
      'tx_test_publication_author_mm',
      'tx_test_publication_author_mm',
      $queryBuilder->expr()->eq(
        'tx_test_domain_model_author.uid', 
        $queryBuilder->quoteIdentifier('tx_test_publication_author_mm.uid_foreign')
      )
    )
    ->where(
        $queryBuilder->expr()->eq(
            'tx_test_publication_author_mm.uid_local', 
            $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)
        )
    )
    ->orderBy('tx_test_domain_model_author.uid', 'ASC');

    $result = $query->execute();
    $res = [];
    while ($row = $result->fetch()) {
        $res[] = $row;
    }
    print_r($res);

Однако я получаю только одну запись, хотя счетчик сообщает, что это будет 3.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Кажется, что QueryBuilder работает по-другому, это дает мне один результат, а именно первую запись в таблице:

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_test_publication_author_mm');

$query = $queryBuilder
    ->select('*')
    ->from('tx_test_publication_author_mm');

$result = $query->execute()->fetchAll();
foreach($result as $row){
    echo $row['field'];;
}

Это дает мне все результаты:

$db = mysqli_connect($dbHost, $dbUser, $dbPassword, $dbName)  or die (mysql_error ());

$sql = "SELECT * FROM tx_test_publication_author_mm";
foreach ($db->query($sql) as $row) {
   echo $row['field'];
}
0 голосов
/ 05 ноября 2019

Если счетчик говорит о трех своих элементах, попробуйте изменить это:

 $result = $query->execute();
 $res = [];
 while ($row = $result->fetch()) {
      $res[] = $row;
 }

на следующее:

$result = $query->execute()->fetchAll();

, который извлекает все строки в массив, через который вы проходите:

foreach($result as $row){
    ...
}
...