Zum Inhalt springen

QueryBuilder Select SUBSTRING()

Erstellt am 30. März 2020 · 1 Antwort · letzte Antwort am 31. März 2020

Tags: TYPO3 9, Frage

bjoernmohr ·

Hallo Zusammen,

ich versuche die MYSQL Funktion Substring zu verwenden, hoffe auf einen Tipp was ich falsch mache.

Fehler: Call to undefined method TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder::substring()

Wie folgt versuche ich die Abfrage in der Extension aufzurufen. Wenn ich die Zeile mit dem Substring auskommentiere funktioniert alles.

<?php
namespace xxxx\Pferdedatenbank\Controller;

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Query\QueryBuilder;
class App
{
function getPferdeListe()
{
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_pferdedatenbank_domain_model_pferde');

$fields = array();
$fields[] = 'tx_pferdedatenbank_domain_model_pferde.uid';
$fields[] = 'tx_pferdedatenbank_domain_model_pferde.pferd_name AS b';

// Hier ist der Wurm drin:
$fields[] = $queryBuilder->expr()->substring('tx_pferdedatenbank_domain_model_pferde.pferd_name',0,1).' AS bb';

$queryBuilder
->select(...$fields)
->from('tx_pferdedatenbank_domain_model_pferde')
->setMaxResults(100)
;
$statement = $queryBuilder->execute();
$all = array();
while ($row = $statement->fetch())
{
$all[] = $row;
}
return $all;
}
}

Julian.​Hofmann ·

Hallo Björn.

Was suchst Du jetzt genau oder erwartest Du von uns als Lösung?
"Call to undefined method TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder::substring()" sagt ja das Problem: Du rufst im ExpressionBuilder eine Methode auf, die es dort nicht gibt. Dein Code funktioniert natürlich dann, wenn Du genau jede Zeile, die die nicht-existente Methode aufruft, auskommentierst.

Was spricht dagegen, den Substring erst im Model zu behandeln? Den Pferd-Namen hast Du dort ja eh schon zur Verfügung, d.h. Du brauchsta us der Datenbank nicht gesondert auslesen.

Viele Grüße
Julian