Search code examples
typo3typo3-extensionstypo3-8.x

TYPO3 Extbase - Basic CRUD / Selecting values from database and render in v8


I tried to fetch some data for testing from tt_content like in the 'SELECT a single row' example here (https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Database/BasicCrud/Index.html#select-a-single-row):

In Controller.php:

...

use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;

...

public function listAction() {

    $uid = 4;
    $tester = GeneralUtility::makeInstance(ConnectionPool::class)
        ->getConnectionForTable('tt_content')
        ->select(
            ['uid', 'pid', 'bodytext'],
            'tt_content',
            [ 'uid' => (int)$uid ]
        )
    ->fetch()   // 1. attempt       
    ->execute();    // 2. attempt
    $this->view->assign('inet', $tester);

}

List.html:

<f:debug>{inet}</f:debug>   

Debug Output when I use ->execute() is:

Extbase Variable Dump

TRUE

Debug Output when I use ->fetch() is:

Extbase Variable Dump

FALSE

Solution

  • So what works is e.g. this

    $uid = 10;
    $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
    $queryBuilder->getRestrictions()->removeAll();
    $statement = $queryBuilder  
        ->select('uid', 'pid', 'header')            
        ->from('tt_content')
        ->where(
           $queryBuilder->expr()->eq('uid', $uid)
        )           
        ->execute();    
    while ($row = $statement->fetchAll()) {
        $this->view->assign('inet', $row);
    }