[Frage] QueryBuilder Select SUBSTRING() TYPO3-Version: 9.5.14

  • bjoernmohr bjoernmoh...
    Jar Jar Binks
    0 x
    1 Beiträge
    0 Hilfreiche Beiträge
    30. 03. 2020, 13:31

    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;
    }
    }


  • 1
  • 0 x
    3154 Beiträge
    140 Hilfreiche Beiträge
    31. 03. 2020, 09:56

    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

  • 1