تخطَّ إلى المحتوى

فئات Criteria و CriteriaCompo

توفر فئات 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;
// شرط واحد
$criteria = new Criteria('status', 'active');
// يصرف: `status` = 'active'
// المساواة (الافتراضي)
$criteria = new Criteria('status', 'active', '=');
// ليس مساوي
$criteria = new Criteria('status', 'active', '<>');
// أكبر من
$criteria = new Criteria('age', 18, '>');
// أقل من أو يساوي
$criteria = new Criteria('age', 65, '<=');
// LIKE (للمطابقة النمطية)
$criteria = new Criteria('email', '%@example.com', 'LIKE');
// IN (لقيم متعددة)
$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));
// يصرف: `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'));

التكامل مع نمط المستودع

Section titled “التكامل مع نمط المستودع”
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:

// آمن - يتم الهروب من القيمة تلقائياً
$userInput = "'; DROP TABLE users; --";
$criteria = new Criteria('username', $userInput);
// الهروب الآمن يصرف: `username` = '\''; DROP TABLE users; --'
الطريقةالوصفالإرجاع
__construct()تهيئة شرط المعاييرvoid
render($prefix = '')صرف إلى مقطع جملة WHERE في SQLstring
getColumn()الحصول على اسم العمودstring
getValue()الحصول على قيمة المقارنةmixed
getOperator()الحصول على عامل المقارنةstring
الطريقةالوصفالإرجاع
__construct($logic = 'AND')تهيئة معايير مركبةvoid
add($criteria, $logic = null)إضافة معايير أو مركبة متداخلةvoid
render($prefix = '')صرف إلى جملة WHERE كاملةstring
count()الحصول على عدد المعاييرint
clear()إزالة جميع المعاييرvoid
  • 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+