Tutorials

Einige nützliche Hilfen und Code-Schnipsel, die ich immer wieder benötige und deshalb hier für alle sammle.

Zurück zur Übersicht

TYPO3 Extbase: Überblick über Query und Repository Methoden

#Tutorials#PHP#TYPO3

Da die Dokumentation bei TYPO3 leider immer wieder unvollständig, veraltet oder einfach unwahr ist, habe ich hier eine Liste gefunden und erweitert, die aufzeigt, was es alles in den Repositories an Methoden gibt. Der Querybuilder ist leider etwas umständlich, aber mit dieser Liste, kriegt man so gut wie jeden Query hin. Ob dieser dann performant ist, sei mal dahingestellt.

Original-Quelle:
http://lbrmedia.net/codebase/Eintrag/extbase-query-methods/

Repository Methoden im Überblick

// hinzufügen
$testRepository->add($myModel);
 
// entfernen
$testRepository->remove($myModel);
 
// alle entfernen
$testRepository->removeAll();
 
// ersetzen
$testRepository->replace($myModel, $myOtherModel);
 
// updaten
$testRepository->update($myModifiedModel);
 
// gesamte Anzahl bekommen 
$testRepository->countAll();
 
// Anzahl bei Einschränkung
$testRepository->countBy[myProperty]($thisMustMatchMyProperty);
 
// Model Objekt via UID bekommen (wenn vorhanden)
$testRepository->findByUid($theUid);
 
// Alle Model Objekte bekommen. Keine weiteren Einschränkungen (Constraints außer enablecolumns, language und storagePid)
$testRepository->findAll(); 
 
// Ein oder mehrere Models nach Eigenschaft bekommen
$testRepository->findBy[myProperty]($thisMustMatchMyProperty); // returns a Storage-object
 
// findOneBy... (wie findbyUid nur mit selbst angegeben Wert)
$testRepository->findOneBy[myProperty]($thisMustMatchMyProperty);
```

Query Methoden im Überblick

// Query-Objekt initialisieren
$query = $this->createQuery();
 
// AND / OR / NOT
$query->logicalAnd($constraints);
$query->logicalOr($constraints);
$query->logicalNot($constraints);
 
// A direct SQL-Statement
$query->statement("SELECT * FROM test_table WHERE foo = "bar"); // string
 
// ORDER BY
$query->setOrderings(array("field" => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING)); // array
$query->setOrderings(array("field" => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING)); // array
 
// LIMIT
$query->setLimit($limit); // integer
 
// OFFSET
$query->setOffset($offset); // integer
 
// only COUNT()
$query->count(); // Führt den Query aus und gibt nur die Anzahl zurück
 
// Führt den Query aus
$query->execute();
 
// Gibt nur das erste Ergebnis zurück (LIMIT 1)
$query->getFirst();
 
/*
 * Beispiel Methode im Repository
 */
public function getOffset($limit = 10,$offset = 0,$options) {
  $query = $this->createQuery();
  $query->matching(
    $query->logicalAnd(
      $query->equals("category", $options['category']),
      $query->equals("tag", $options['tag'])
    )
  );
 
  $query->setOrderings(array("crdate" => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING))
    ->setOffset($offset)
    ->setLimit($limit);
 
  return $query->execute();
}

Einschränkungen / Where Clause / Constraints - Methoden für ein Query
// = 
$query->equals($myProperty, $equalsThis, $caseSensitive = true);
 
// <
$query->lessThan($myProperty, $isLessThanThis);
 
// >
$query->greaterThan($myProperty, $isGreaterThanThis);
 
// <=
$query->lessThanOrEqual($myProperty, $isLessThanOrEqualThis);
 
// >=
$query->greaterThanOrEqual($myProperty, $isGreaterThanOrEqualThis);
 
// %suche%
$query->like($myProperty, $theLikeString);
 
// beinhaltet
$query->contains($myProperty, $hasThisValue);
 
// in
$query->in($myProperty, $isInThisObjectOrArray);
```

### Einstellungen/Settings im Repository
```php
// Entweder globale Einstellungen so setzen
public function initializeObject() {
  // Einstellungen laden
  $querySettings = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings');
 
  // Einstellungen bearbeiten
  $querySettings->setSomething();
 
  // Einstellungen als Default setzen
  $this->setDefaultQuerySettings($querySettings);
}
 
// Oder direkt nur für die Methode im Repository
public function findSomething() {
  $query = $this->createQuery();

  // Einstellungen setzen
  $query->getQuerySettings()->setSomething();
  
  return $query->execute();
}
 
// Alle Einstellungen im Überblick
$querySettings->setRespectStoragePage(FALSE); // storagePid ignorieren
$querySettings->setStoragePageIds(array(1, 2, 3)); // storagePids setzen
$querySettings->setRespectEnableFields(FALSE); // enableFields ignorieren (…is deprecated)
$querySettings->setIgnoreEnableFields(TRUE); // Die Felder die im TCA unter "enablecolumns" stehen ignorieren
$querySettings->setEnableFieldsToBeIgnored(array('disabled', 'starttime')); // Nur einzelne enableFields ignorieren 
$querySettings->setIncludeDeleted(TRUE); // Auch gelöschte Records (deleted = 1) anzeigen
$querySettings->setRespectSysLanguage(FALSE); // Sprache (sys_language) ignorieren
$querySettings->setSysLanguageUid(2); // sys_language setzen


Kommentare

  • Mateng
    Hier fehlt ein schließendes Quote: $query->statement("SELECT * FROM test_table WHERE foo = "bar");
    Antworten
  • franf
    Danke! Die Seite hat mir schon oft geholfen.
    Antworten
  • Steve Meier
    Schön von hier kopiert ohne Erwähnung der Quelle:

    http://lbrmedia.net/codebase/Eintrag/extbase-query-methods/
    Antworten
    • Andre Rinas
      Hallo Steve, danke für deinen Kommentar. Habe die Quelle ergänzt. Ich sammel auf meiner Seite nur Dinge, die ich selbst herausfinde oder nach ewigem Suchen gefunden habe, damit ich es beim zweiten mal schneller wieder finde.

      Grüße André
      Antworten

Hinterlasse einen Kommentar

Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Kommentar wird gespeichert
Danke für deinen Kommentar! Sobald er freigegeben wurde erscheint er hier.