Criteria and CriteriaCompo Classes¶
The Criteria and CriteriaCompo classes provide a fluent, object-oriented interface for building complex database queries. These classes abstract SQL WHERE clauses, allowing developers to construct dynamic queries safely and readably.
Class Overview¶
Criteria Class¶
The Criteria class represents a single condition in a WHERE clause:
namespace Xoops\Database;
class Criteria
{
protected $column;
protected $operator;
protected $value;
protected $function;
public function __construct(
string $column,
mixed $value = null,
string $operator = '=',
string $function = ''
) {}
public function render(string $prefix = ''): string {}
}
Basic Usage¶
Simple Criteria¶
use Xoops\Database\Criteria;
use Xoops\Database\CriteriaCompo;
// Single condition
$criteria = new Criteria('status', 'active');
// Renders: `status` = 'active'
Different Operators¶
// Equality (default)
$criteria = new Criteria('status', 'active', '=');
// Not equal
$criteria = new Criteria('status', 'active', '<>');
// Greater than
$criteria = new Criteria('age', 18, '>');
// Less than or equal
$criteria = new Criteria('age', 65, '<=');
// LIKE (for pattern matching)
$criteria = new Criteria('email', '%@example.com', 'LIKE');
// IN (for multiple values)
$criteria = new Criteria('status', ['active', 'pending', 'review'], 'IN');
Building Complex Queries¶
AND Logic (Default)¶
$criteria = new CriteriaCompo();
$criteria->add(new Criteria('status', 'active'));
$criteria->add(new Criteria('age', 18, '>='));
$criteria->add(new Criteria('verified', 1));
// Renders: `status` = 'active' AND `age` >= 18 AND `verified` = 1
OR Logic¶
$criteria = new CriteriaCompo('OR');
$criteria->add(new Criteria('role', 'admin'));
$criteria->add(new Criteria('role', 'moderator'));
$criteria->add(new Criteria('role', 'editor'));
Integration with Repository Pattern¶
Repository Example¶
namespace MyModule\Repository;
use Xoops\Database\XoopsDatabase;
use Xoops\Database\Criteria;
use Xoops\Database\CriteriaCompo;
class UserRepository
{
private $db;
private $table = 'users';
public function __construct(XoopsDatabase $db)
{
$this->db = $db;
}
public function findByCriteria(CriteriaCompo $criteria): array
{
$sql = "SELECT * FROM {$this->table}";
if ($criteria->count() > 0) {
$sql .= " WHERE " . $criteria->render();
}
$result = $this->db->query($sql);
$users = [];
while ($row = $this->db->fetchArray($result)) {
$users[] = new User($row);
}
return $users;
}
}
Safety and Security¶
Automatic Escaping¶
The Criteria class automatically escapes values to prevent SQL injection:
// Safe - value is automatically escaped
$userInput = "'; DROP TABLE users; --";
$criteria = new Criteria('username', $userInput);
// Safely renders: `username` = '\''; DROP TABLE users; --'
API Reference¶
Criteria Methods¶
| Method | Description | Return |
|---|---|---|
__construct() | Initialize a criteria condition | void |
render($prefix = '') | Render to SQL WHERE clause segment | string |
getColumn() | Get the column name | string |
getValue() | Get the comparison value | mixed |
getOperator() | Get the comparison operator | string |
CriteriaCompo Methods¶
| Method | Description | Return |
|---|---|---|
__construct($logic = 'AND') | Initialize composite criteria | void |
add($criteria, $logic = null) | Add criteria or nested composite | void |
render($prefix = '') | Render to complete WHERE clause | string |
count() | Get number of criteria | int |
clear() | Remove all criteria | void |
Related Documentation¶
- XoopsDatabase - Database class reference
- Repository-Pattern - Repository pattern in XOOPS
- Service-Layer-Pattern - Service layer pattern
Version Information¶
- Introduced: XOOPS 2.5.0
- Last Updated: XOOPS 2026
- Compatibility: PHP 7.4+