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

Definitionen persistenter Objekte im Detail

eZPersistentObject für PHP-Entwickler - jeder Schlüssel von definition(), die Feldformen, die Bedingungssyntax von fetchObjectList() mit Operatoren, Bereichen und IN-Listen, Sortierung, Grenzen und eigene Felder…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/php-developers/persistent-object-definitions-in-depth.md

On this page

This page is a translation. Read the English original

Definitionen persistenter Objekte im Detail

Diese Seite richtet sich an PHP-Entwickler, die Daten in eigenen Tabellen speichern. eZPersistentObject (kernel/classes/ezpersistentobject.php) bildet eine Tabelle über ein statisches Array definition() auf eine Klasse ab und baut das SQL für jede unterstützte Datenbank. Die ersten Schritte finden Sie unter Persistente Objekte und eigene Tabellen; diese Seite ist die Referenz dahinter.

Inhalt

  1. Die Schlüssel der Definition
  2. Felddefinitionen
  3. Abrufen: die Parameter
  4. Die Bedingungssyntax
  5. Schreiben
  6. Attribute und Templates
  7. Häufige Fehler

Die Schlüssel der Definition

SchlüsselBedeutung
fieldsdie Spalten der Tabelle: Spaltenname => Felddefinition
keysdie Spalten, die eine Zeile identifizieren (der Primärschlüssel)
increment_keydie Spalte, die die Datenbank beim Insert füllt; nach store() am Objekt gesetzt
function_attributeszusätzliche Attributnamen, die auf Methoden abgebildet werden, gelesen mit attribute() und in Templates
set_functionsAttributnamen, die auf von setAttribute() verwendete Methoden abgebildet werden
class_namedie Klasse, die für abgerufene Zeilen instanziiert wird
sortStandardsortierung: Spalte => asc oder desc
nameder Tabellenname
groupingStandardgruppierung für Listenabrufe
class acmeReportItem extends eZPersistentObject
{
    public static function definition()
    {
        return array(
            'fields' => array(
                'id'      => array( 'name' => 'ID', 'datatype' => 'integer', 'default' => 0, 'required' => true ),
                'user_id' => array( 'name' => 'UserID', 'datatype' => 'integer', 'default' => 0, 'required' => true ),
                'status'  => array( 'name' => 'Status', 'datatype' => 'string', 'default' => 'open', 'required' => true ),
                'amount'  => array( 'name' => 'Amount', 'datatype' => 'integer', 'default' => 0, 'required' => true ),
                'created' => array( 'name' => 'Created', 'datatype' => 'integer', 'default' => 0, 'required' => true ) ),
            'keys' => array( 'id' ),
            'increment_key' => 'id',
            'function_attributes' => array( 'user' => 'user' ),
            'class_name' => 'acmeReportItem',
            'sort' => array( 'created' => 'desc' ),
            'name' => 'acme_report_item' );
    }

    public function user()
    {
        return eZUser::fetch( $this->attribute( 'user_id' ) );
    }
}

Die eigenen Klassen des Kernels haben dieselbe Form, zum Beispiel eZSection::definition() in kernel/classes/ezsection.php.

Felddefinitionen

Ein Feld ist entweder die Kurzform, Spalte => Name der Member-Variable ('id' => 'ID'), oder ein Array:

SchlüsselBedeutung
nameder Name der Member-Variable
datatypeinteger, float, string, verwendet beim Schreiben von Werten
defaultder Wert eines neuen Objekts
requiredob das Feld gesetzt sein muss

Abrufen: die Parameter

eZPersistentObject::fetchObject( $def, $fieldFilters, $conds, $asObject = true, $grouping = null, $customFields = null );
eZPersistentObject::fetchObjectList( $def, $fieldFilters = null, $conds = array(), $sorts = null, $limit = null,
                                     $asObject = true, $grouping = false, $customFields = null,
                                     $customTables = null, $customConds = null );
eZPersistentObject::count( $def, $conds = null, $field = null );
ParameterBedeutung
$fieldFiltersnull für alle Spalten oder eine Liste von Spaltennamen
$condsdie Bedingungen, siehe unten
$sortsnull verwendet das sort der Definition, false keine, oder Spalte => asc/desc
$limitarray( 'offset' => 0, 'length' => 20 )
$asObjecttrue für Objekte von class_name, false für einfache Zeilen
$customFields, $customTables, $customCondszusätzliche Spalten, Tabellen und ein roher WHERE-Teil für Joins; maskieren Sie alles, was Sie in $customConds schreiben, selbst

fetchObjectList() gibt ein Array zurück oder bei einem Datenbankfehler null: Sichern Sie vor foreach ab.

Die Bedingungssyntax

BedingungSQL
array( 'id' => 5 )id = 5
array( 'amount' => array( '>', 5 ) )amount > 5
array( 'created' => array( false, array( $from, $to ) ) )created BETWEEN $from AND $to
array( 'id' => array( array( 1, 5, 7 ) ) )id IN ( 1, 5, 7 )
mehrere Schlüsselmit AND verbunden

Werte in Bedingungen werden für Sie maskiert; das ist der Hauptgrund, persistente Objekte handgeschriebenem SQL vorzuziehen (SQL mit eZDB, sicher). Casten Sie IDs trotzdem ((int)$id), damit nie ein falscher Typ die Abfrage erreicht.

Schreiben

$item = new acmeReportItem( array( 'user_id' => $userID, 'status' => 'open', 'amount' => 2, 'created' => time() ) );
$item->store();                                   // insert; 'id' is set from increment_key
$item->setAttribute( 'amount', 3 );
$item->sync();                                    // store only when an attribute changed (dirty data)
$item->remove();                                  // delete this row
eZPersistentObject::removeObject( acmeReportItem::definition(), array( 'user_id' => (int)$userID ) );

store(), sync() und remove() sind nach den eigenen Worten des Kernels „transaction unsafe“: Fassen Sie zusammengehörige Schreibvorgänge in eine Transaktion (eZDB::instance()->begin() und commit()).

Attribute und Templates

attribute( $name ) liest ein Feld oder ruft das Funktionsattribut auf; hasAttribute() sagt, ob ein Name existiert. Diese Schnittstelle verwenden Templates, sodass ein persistentes Objekt, das eine Fetch-Funktion zurückgibt, als $item.status und $item.user.login lesbar ist (Eine Fetch-Funktion schreiben).

Häufige Fehler

FehlerWirkungLösung
ein SQL-String in $condsnicht unterstützt; verwenden Sie die Array-Syntaxarray( 'amount' => array( '>', 5 ) )
unbegrenztes fetchObjectList()Speicher und Zeit wachsen mit der Tabelleübergeben Sie immer $limit
foreach über das Ergebnis ohne PrüfungWarnung, wenn der Abruf fehlgeschlagen ist (null)if ( is_array( $rows ) )
nicht deklarierte Member-EigenschaftenDeprecation-Hinweise von PHP 8.2 in alten Klassendeklarieren Sie die Member
mehrere Schreibvorgänge ohne Transaktionhalb geschriebene Daten nach einem Fehlerbegin() und commit() darum herum

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