Bỏ qua để đến nội dung

Các lớp Tiêu chí và Tiêu chíCompo

CriteriaCriteriaCompo classes cung cấp giao diện hướng đối tượng, trôi chảy để xây dựng các truy vấn cơ sở dữ liệu phức tạp. Các mệnh đề classes trừu tượng SQL WHERE này cho phép các nhà phát triển xây dựng các truy vấn động một cách an toàn và dễ đọc.

Criteria class đại diện cho một điều kiện duy nhất trong mệnh đề 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 class tự động thoát các giá trị để ngăn chặn việc tiêm SQL:

// Safe - value is automatically escaped
$userInput = "'; DROP TABLE users; --";
$criteria = new Criteria('username', $userInput);
// Safely renders: `username` = '\''; DROP TABLE users; --'
Phương phápMô tảTrở về
__construct()Khởi tạo điều kiện tiêu chítrống
render($prefix = '')Kết xuất thành đoạn mệnh đề SQL WHEREchuỗi
getColumn()Lấy tên cộtchuỗi
getValue()Lấy giá trị so sánhhỗn hợp
getOperator()Lấy toán tử so sánhchuỗi
Phương phápMô tảTrở về
__construct($logic = 'AND')Khởi tạo tiêu chí tổng hợptrống
add($criteria, $logic = null)Thêm tiêu chí hoặc tổ hợp lồng nhautrống
render($prefix = '')Kết xuất để hoàn thành mệnh đề WHEREchuỗi
count()Lấy số tiêu chíint
clear()Xóa tất cả tiêu chítrống
  • XoopsDatabase - Cơ sở dữ liệu tham khảo class
  • ../../03-Module-Development/Patterns/Repository-Pattern - Mẫu kho lưu trữ trong XOOPS
  • ../../03-Module-Development/Patterns/Service-Layer-Pattern - Mẫu lớp dịch vụ
  • Giới thiệu: XOOPS 2.5.0
  • Cập nhật lần cuối: XOOPS 4.0
  • Khả năng tương thích: PHP 7.4+