Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Abfragen: Inhalts-Fetches, eZDB und SQL

Wie Sie in Exponential Daten abfragen, wenn Sie an einen Query Builder gewöhnt sind - Inhalts-Fetches mit Klassen-, Attribut- und Tiefenfiltern für Inhalte, Bedingungs-Arrays für persistente Objekte, eZDB arrayQuery und…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/web-framework-developers/querying-content-and-tables.md

On this page

This page is a translation. Read the English original

Abfragen: Inhalts-Fetches, eZDB und SQL

Diese Seite richtet sich an Entwickler, die zu einem Query Builder greifen ($qb->where(), Model::where(), Querysets, Arel). Der Kernel hat keinen allgemeinen Query Builder. Sie fragen Daten je nach Art auf eine von drei Weisen ab.

Inhalt

  1. Welcher Weg für welche Daten
  2. Inhalte: Fetch-Parameter
  3. Ihre Tabellen: Bedingungs-Arrays
  4. Ihre Tabellen: SQL über eZDB
  5. Portabilität
  6. Performance

Welcher Weg für welche Daten

DatenWegErgebnis
Inhalte (Knoten, Objekte)eZContentObjectTreeNode::subTreeByNodeID() und im Template fetch( 'content', 'list', ... )angewendete Berechtigungen, Sprachbehandlung, Sortierung nach Attribut
Ihre persistenten ObjekteeZPersistentObject::fetchObjectList() mit BedingungenObjekte, Maskierung, jede Datenbank-Engine
Berichte, Joins, Aggregate auf Ihren TabelleneZDB::instance()->arrayQuery()Zeilen als Arrays
Volltextsuche über Inhaltedie Suchmaschine (eingebaut oder Solr über ezfind)Relevanz, Facetten mit Solr (Website-Suche)

Inhalte: Fetch-Parameter

$nodes = eZContentObjectTreeNode::subTreeByNodeID( array(
    'ClassFilterType'  => 'include',
    'ClassFilterArray' => array( 'event' ),
    'AttributeFilter'  => array( array( 'event/start_date', '>=', time() ) ),
    'SortBy'           => array( array( 'attribute', true, 'event/start_date' ) ),
    'Depth'            => 3,
    'Limit'            => 20,
    'Offset'           => 0 ), $parentNodeID );

Das Parameter-Array ist der Query Builder für Inhalte: Klassenfilter, Attributfilter, Tiefe, Sortierung, Limit und Offset. Die content/read-Richtlinie des aktuellen Benutzers wird angewendet, es sei denn, Sie übergeben 'Limitation' => array() – was Sie in Code, der Benutzern Ergebnisse anzeigt, niemals tun dürfen (Die Inhalts-API). Templates verwenden dieselben Parameter in Kleinschreibung über fetch( 'content', 'list', hash( ... ) ) (Fetch-Funktionen).

Ihre Tabellen: Bedingungs-Arrays

$items = eZPersistentObject::fetchObjectList( expDemoItem::definition(), null,
                                              array( 'user_id' => (int)$userID ),
                                              array( 'created' => 'desc' ),
                                              array( 'offset' => 0, 'length' => 20 ) );

Bedingungen sind Arrays; die Werte werden für Sie maskiert (ORM: eZPersistentObject).

Ihre Tabellen: SQL über eZDB

Aus Datenbankzugriff und SQL:

$db = eZDB::instance();
$rows = $db->arrayQuery( 'SELECT id, title FROM expdemo_item WHERE user_id = ' . (int)$userID . ' ORDER BY created DESC',
                         array( 'offset' => 0, 'limit' => 20 ) );
$db->query( "UPDATE expdemo_item SET title = '" . $db->escapeString( $title ) . "' WHERE id = " . (int)$id );

arrayQuery() und query() erwarten einen fertigen SQL-String, kein Statement mit Platzhaltern wie bei PDO: Casten Sie Ganzzahlen, umschließen Sie Strings mit escapeString() und wählen Sie Bezeichner aus einer Allow-List. query() gibt bei datenändernden Statements true oder false zurück.

Portabilität

Der Treiber wird über site.ini [DatabaseSettings] DatabaseImplementation gewählt; der Kernel liefert Treiber für MySQL/MariaDB (eZMySQLiDB), PostgreSQL, SQLite (eZSQLite3DB) und MongoDB (expMongoDB) mit, Oracle kommt über die Erweiterung ezoracle (Datenbankunterstützung). Damit Ihr SQL auf allen funktioniert:

  • Verwenden Sie Offsets und Limits von arrayQuery(), nicht LIMIT im String.
  • Vermeiden Sie Engine-spezifische Funktionen wie IFNULL, GROUP_CONCAT oder SET @var := ....
  • MongoDB kennt keine Joins: Der Treiber übersetzt gängige Statements; für Ihre eigenen Tabellen sollten Sie eZPersistentObject bevorzugen.
  • Testen Sie auf SQLite (Standard für neue Installationen) und auf der Produktions-Engine.

Performance

  • Begrenzen Sie Listen immer; zählen Sie mit subTreeCountByNodeID() oder eZPersistentObject::count().
  • Holen Sie Daten in langen Skripten seitenweise und leeren Sie dazwischen die In-Memory-Caches (eZContentObject::clearCache()).
  • Der SQL-Query-Cache kann Leseergebnisse vorhalten (querycache.ini) (SQL-Query-Cache).
  • Die Debug-Leiste zeigt die Abfragen einer Seite und ihre Dauer (Debugging).

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x