简体   繁体   English

获取TYPO3中的数据库记录 viewHelper

[英]Get database records in TYPO3 viewHelper

I want to create a database query in a view helper, this works with the following code:我想在视图助手中创建一个数据库查询,这适用于以下代码:

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

However, I only get one record, although the counter tells me it would be 3.然而,我只得到了一条记录,尽管计数器告诉我它将是 3。

What am I doing wrong?我究竟做错了什么?

If the counter says its three items, then try change this:如果柜台说它的三个项目,然后尝试改变这个:

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

into this:进入这个:

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

That fetches all rows into an array that you walk throug with:这会将所有行提取到您遍历的数组中:

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

It seems the QueryBuilder works differently, this gives me one result namely the first entry in the table:看起来 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'];;
}

This gives me all results:这给了我所有的结果:

$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'];
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM