Skip to content

Kriteriji in razredi CriteriaCompo

Razreda Criteria in CriteriaCompo zagotavljata tekoč, objektno usmerjen vmesnik za gradnjo kompleksnih poizvedb po bazi podatkov. Ti razredi abstrahirajo SQL WHERE klavzule, ki razvijalcem omogočajo varno in berljivo konstruiranje dinamičnih poizvedb.

Razred Criteria predstavlja en sam pogoj v klavzuli WHERE:

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 {}
}
use Xoops\Database\Criteria;
use Xoops\Database\CriteriaCompo;
// Single condition
$criteria = new Criteria('status', 'active');
// Renders: `status` = 'active'
// 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');
$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
$criteria = new CriteriaCompo('OR');
$criteria->add(new Criteria('role', 'admin'));
$criteria->add(new Criteria('role', 'moderator'));
$criteria->add(new Criteria('role', 'editor'));
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;
}
}

Razred Criteria samodejno uide vrednostim, da prepreči vstavljanje SQL:

// Safe - value is automatically escaped
$userInput = "'; DROP TABLE users; --";
$criteria = new Criteria('username', $userInput);
// Safely renders: `username` = '\''; DROP TABLE users; --'
MetodaOpisVrnitev
__construct()Inicializirajte pogoj kriterijaničen
render($prefix = '')Upodobi v segment klavzule SQL WHEREniz
getColumn()Pridobite ime stolpcaniz
getValue()Pridobite primerjalno vrednostmešano
getOperator()Pridobite primerjalni operatorniz
MetodaOpisVrnitev
__construct($logic = 'AND')Inicializiraj sestavljena merilaničen
add($criteria, $logic = null)Dodajte merila ali ugnezdeni sestavljenničen
render($prefix = '')Upodobi za dokončanje klavzule WHEREniz
count()Pridobi število kriterijevint
clear()Odstrani vse kriterijeničen
  • XoopsDatabase - Referenca razreda baze podatkov
  • ../../03-Module-Development/Patterns/Repository-Pattern - vzorec repozitorija v XOOPS
  • ../../03-Module-Development/Patterns/Service-Layer-Pattern - Vzorec storitvenega sloja
  • Predstavljeno: XOOPS 2.5.0
  • Nazadnje posodobljeno: XOOPS 4.0
  • Združljivost: PHP 7.4+