Zum Inhalt springen

Criteria API-Referenz

Vollständige API-Dokumentation für das XOOPS Criteria-Abfragebau-System.


classDiagram
class CriteriaElement {
<<abstract>>
#string $order
#string $sort
#int $limit
#int $start
+setSort(sort)
+getSort()
+setOrder(order)
+getOrder()
+setLimit(limit)
+getLimit()
+setStart(start)
+getStart()
+setGroupby(groupby)
+getGroupby()
+render()
+renderWhere()
+renderLdap()
}
class Criteria {
-string $prefix
-string $function
-string $column
-string $operator
-mixed $value
+__construct(column, value, operator, prefix, function)
+render()
+renderWhere()
}
class CriteriaCompo {
-array $criterias
-array $conditions
+__construct(criteria)
+add(criteria, condition)
+render()
+renderWhere()
}
CriteriaElement <|-- Criteria
CriteriaElement <|-- CriteriaCompo
CriteriaCompo o-- CriteriaElement : contains

public function __construct(
string $column, // Spaltenname
mixed $value = '', // Zu vergleichender Wert
string $operator = '=', // Vergleichsoperator
string $prefix = '', // Tabellenpräfix
string $function = '' // SQL-Funktions-Wrapper
)
OperatorBeispielSQL-Ausgabe
=new Criteria('status', 1)status = 1
!=new Criteria('status', 0, '!=')status != 0
<>new Criteria('status', 0, '<>')status <> 0
<new Criteria('age', 18, '<')age < 18
<=new Criteria('age', 18, '<=')age <= 18
>new Criteria('age', 18, '>')age > 18
>=new Criteria('age', 18, '>=')age >= 18
LIKEnew Criteria('title', '%php%', 'LIKE')title LIKE '%php%'
NOT LIKEnew Criteria('title', '%spam%', 'NOT LIKE')title NOT LIKE '%spam%'
INnew Criteria('id', '(1,2,3)', 'IN')id IN (1,2,3)
NOT INnew Criteria('id', '(1,2,3)', 'NOT IN')id NOT IN (1,2,3)
IS NULLnew Criteria('deleted', null, 'IS NULL')deleted IS NULL
IS NOT NULLnew Criteria('email', null, 'IS NOT NULL')email IS NOT NULL
BETWEENnew Criteria('created', '1000 AND 2000', 'BETWEEN')created BETWEEN 1000 AND 2000
// Einfache Gleichheit
$criteria = new Criteria('status', 'published');
// Numerischer Vergleich
$criteria = new Criteria('views', 100, '>=');
// Mustererkennung
$criteria = new Criteria('title', '%XOOPS%', 'LIKE');
// Mit Tabellenpräfix
$criteria = new Criteria('uid', 1, '=', 'u');
// Rendert: u.uid = 1
// Mit SQL-Funktion
$criteria = new Criteria('title', '', '!=', '', 'LOWER');
// Rendert: LOWER(title) != ''

// Leere Kompo erstellen
$criteria = new CriteriaCompo();
// Oder mit initialem Kriterium
$criteria = new CriteriaCompo(new Criteria('status', 'active'));
// Kriterien hinzufügen (UND standardmäßig)
$criteria->add(new Criteria('views', 10, '>='));
// Mit ODER hinzufügen
$criteria->add(new Criteria('featured', 1), 'OR');
// Verschachtelung
$subCriteria = new CriteriaCompo();
$subCriteria->add(new Criteria('author', 1));
$subCriteria->add(new Criteria('author', 2), 'OR');
$criteria->add($subCriteria); // (author = 1 OR author = 2)
$criteria = new CriteriaCompo();
$criteria->add(new Criteria('status', 'published'));
// Einfache Sortierung
$criteria->setSort('created');
$criteria->setOrder('DESC');
// Mehrfache Sortier-Spalten
$criteria->setSort('category_id, created');
$criteria->setOrder('ASC, DESC');
// Paginierung
$criteria->setLimit(10); // Elemente pro Seite
$criteria->setStart(0); // Offset (page * limit)
// Group by
$criteria->setGroupby('category_id');

  1. Verwenden Sie immer LIMIT für große Tabellen
  2. Verwenden Sie Indizes auf Spalten in Kriterien
  3. Vermeiden Sie führende Wildcards in LIKE ('%term' ist langsam)
  4. Pre-Filter in PHP wenn möglich für komplexe Logik
  5. Verwenden Sie COUNT sparsam - Cache-Ergebnisse wenn möglich

  • Database Layer
  • XoopsObjectHandler API
  • SQL Injection Prevention

#xoops #api #criteria #database #query #reference