דלגו לתוכן

קריטריונים וקריטריונים כיתות קומפו

המחלקות Criteria וCriteriaCompo מספקות ממשק שוטף ומונחה עצמים לבניית שאילתות מסד נתונים מורכבות. מחלקות אלה מופשטות סעיפי SQL WHERE, המאפשרים למפתחים לבנות שאילתות דינמיות בצורה בטוחה וקריאה.

המחלקה Criteria מייצגת תנאי יחיד בסעיף 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;
}
}

המחלקה Criteria בורחת אוטומטית לערכים כדי למנוע הזרקת SQL:

// Safe - value is automatically escaped
$userInput = "'; DROP TABLE users; --";
$criteria = new Criteria('username', $userInput);
// Safely renders: `username` = '\''; DROP TABLE users; --'
שיטהתיאורחזור
__construct()אתחול תנאי קריטריוניםבטל
render($prefix = '')עיבוד לקטע סעיף SQL WHEREמחרוזת
getColumn()קבל את שם העמודהמחרוזת
getValue()קבל את ערך ההשוואהמעורב
getOperator()קבל את אופרטור ההשוואהמחרוזת
שיטהתיאורחזור
__construct($logic = 'AND')אתחול קריטריונים מורכביםבטל
add($criteria, $logic = null)הוסף קריטריונים או רכיב מקונןבטל
render($prefix = '')עיבוד להשלמת WHERE סעיףמחרוזת
count()קבל מספר קריטריוניםint
clear()הסר את כל הקריטריוניםבטל
  • XoopsDatabase - הפניה למחלקות מסד נתונים
  • ../../03-Module-Development/Patterns/Repository-Pattern - תבנית מאגר ב-XOOPS
  • ../../03-Module-Development/Patterns/Service-Layer-Pattern - תבנית שכבת שירות
  • הצגה: XOOPS 2.5.0
  • עדכון אחרון: XOOPS 4.0
  • תאימות: PHP 7.4+