Eigene Extbase Repository Queries

Für eigene Anfragen an die Tabellendaten können Funktionen in der Repository Class geschrieben werden. Diese werden im Controller wie folgt aufgerufen:

$result = $this->myTableRepository->myFunction('foo' , 'bar');

Der Funktionsname sollte dabei aussagekräftig sein, inzwischen sind Namen wie 'findByLocationAndDate' oder 'countByProperty' Standard geworden.

Eine einfache Funktion im Repository sieht dann so aus:

/**
 * My Query Function
*
* @param int $myValue
*
*/
public function findByMyProperty($myValue) {
    $query = $this->createQuery();
       
     $query->matching(
         $query->equals('table_field', $myValue)
      );

      return $query->execute();
    }

 

Gut, diese Abfrage hätte man auch direkt im Controller über eine findByXyz machen können - aber es geht um den Workflow :)

Zunächst wird eine neue Query erzeugt - die Abfragebedingung steht innerhalb des matching Blocks, in der Returnanwiesung wird die Query ausgeführt.

Folgende Operatoren sind in der Abfrage möglich:

$query->equals
$query->in
$query->like
$query->contains
$query->lessThan
$query->lessThanOrEqual
$query->greaterThan
$query->greaterThanOrEqual

ab TYPO3 7.5
$query->between

Logische Verknüpfungen von Operatoren

Ein Beispiel für die Verküpfung mehrerer Operatoren:

$query = $query->matching(
    $query->logicalAnd(
       $query->equals(‘tablefield1‘, $foo),
        $query->equals(‘tablefield2‘, $bar)
   )
)

Dabei stehen folgende Methoden zur Verfügung:

$query->logicalAnd
$query->logicalOr
$query->logicalNot

Eine Verschachtelung ist dabei möglich:

$query = $query->matching(
    $query->logicalOr(
        $query->logicalAnd(
           $query->equals(‘tablefield1‘, $foo),
            $query->equals(‘tablefield2‘, $bar)
       ),
        $query->logicalAnd(
           $query->equals(‘tablefield3‘, $foo),
            $query->equals(‘tablefield4‘, $bar)
       )
    )
)

Extbase Query Optionen

Nachdem Ihr die Query mit

$query = $this->createQuery();

initialisiert habt, (siehe Beispiel ganz oben auf der Seite), stehen euch folgende Optionen zur Verfügung:

$query->setLimit($integer);
$query->setOffset($integer);
$query->setOrderings(array(
    'name' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING,
    'firstName' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING,
));

$query->getQuerySettings()->setRespectStoragePage(FALSE);
$query->getQuerySettings()->setIgnoreEnableFields(TRUE)->setIncludeDeleted(FALSE);

 

Und zusätzlich in der execute Funktion:

return $query->execute()->count();
return $query->execute()->getFirst();

Ich denke die Funktionen erklären sich alle von selbst.

Weitere Artikel zu diesem Thema:

Empfehlenswerte Lektüre:

HTML5 Handbuch

Stefan Münz (Gründer von SELFHTML) geht in der 10. Auflage seines Bestsellers auf die Besonderheiten von HTML5 und CSS3 ein. Dabei wird ebenso die Ausgabe auf Smaptphones und Handys berücksichtigt, wie auch jQuery als Scriptsprache. Damit ist das Buch ein wertvoller Ratgeber für alle die Webseiten entwickeln unabhängig vom eingesetztem CMS System.

Kommentare

keine Kommentare vorhanden


Kommentar verfassen

Die Email Adresse wird nicht veröffentlicht.