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
Einschränkungen / Where Clause / Constraints - Methoden für ein Query
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
// =
$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
http://lbrmedia.net/codebase/Eintrag/extbase-query-methods/
Grüße André
Hinterlasse einen Kommentar