Extbase - Query Objekt: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
Zeile 1: Zeile 1:
 +
 +
 
Siehe auch:
 
Siehe auch:
  
Zeile 8: Zeile 10:
  
 
Das Query Object steuert Abfragen auf die Datenbank. Wenn man z.B. findAll() im Controller ausführt, werden die Parameter für die Abfrage aus diesem Objekt geholt.
 
Das Query Object steuert Abfragen auf die Datenbank. Wenn man z.B. findAll() im Controller ausführt, werden die Parameter für die Abfrage aus diesem Objekt geholt.
 +
 +
 +
== Übersicht ==
 +
=== Allgemeines Vorgehen ===
 +
Einfache Anfragen z.B. Filtern nach einer bestimmten Eigenschaft (Property) geht mit der findBy[property] Methode. Nach der uid sucht man z.B. mit.
 +
findByUid()
 +
Das geht mit allen Eigenschaften im Model (findByName, findByIrgendwas)
 +
 +
Für '''spezielle Queries''' erstellt man mit
 +
$this->createQuery()
 +
ein neues '''Query Objekt'''. Diesem gibt man dann '''Conditions und Sortierungen''' mit. Wichtige Methoden sind z.B. matching(), execute() und setOrderings())
 +
=== Group By ===
 +
Das wird von Extbase nicht erzeugt.  Aber es gibt einen GroupFor View Helper. Ansonsten kann man auch auf eigene Queries ausweichen.
 +
=== Eigene Queries ===
 +
Todo
  
 
== Beipiele ==
 
== Beipiele ==

Version vom 26. Juni 2015, 15:29 Uhr


Siehe auch:

Extbase - Sortierung und Abfrage von Objekten

http://mbless.de/blog/2015/03/05/typo3-extbase-query-methods.html

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

Das Query Object steuert Abfragen auf die Datenbank. Wenn man z.B. findAll() im Controller ausführt, werden die Parameter für die Abfrage aus diesem Objekt geholt.


Übersicht

Allgemeines Vorgehen

Einfache Anfragen z.B. Filtern nach einer bestimmten Eigenschaft (Property) geht mit der findBy[property] Methode. Nach der uid sucht man z.B. mit.

findByUid()

Das geht mit allen Eigenschaften im Model (findByName, findByIrgendwas)

Für spezielle Queries erstellt man mit

$this->createQuery()

ein neues Query Objekt. Diesem gibt man dann Conditions und Sortierungen mit. Wichtige Methoden sind z.B. matching(), execute() und setOrderings())

Group By

Das wird von Extbase nicht erzeugt. Aber es gibt einen GroupFor View Helper. Ansonsten kann man auch auf eigene Queries ausweichen.

Eigene Queries

Todo

Beipiele

Beispiel Kommaseparierte Liste für Abfrage

http://www.buero-sonne.de/2014/10/16/mysql-orderby-field-in-extbase.html

/**
 *  Find by multiple uids using, seperated string and maintain the list order 
 * 
 */
public function findByUidListOrderByList($uidList) {
    $uidArray = explode(",", $uidList);
    $query = $this->createQuery();
    $query->matching(
        $query->in('uid', $uidArray),
        $query->logicalAnd(
            $query->equals('hidden', 0),
            $query->equals('deleted', 0)
        )
    );
    $query->setOrderings($this->orderByField('uid', $uidArray));
 
    return $query->execute();
}
 
 /**
 *  Set the order method 
 * 
 */
protected function orderByField($field, $values) {
    $orderings = array();
    foreach ($values as $value) {
        $orderings["$field={$value}"] = \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING;
    }
    return $orderings;
}