🦖
[■] codesaur/dataobject 1=[↕]
codesaur/dataobject · v10.2.1

DataObject

PDO суурьтай өгөгдлийн модель ба хүснэгт удирдагч компонент (MySQL / PostgreSQL / SQLite)

Packagist version Downloads PHP version License Aikido Intel 100/100
1:1 ══ composer require codesaur/dataobject
[■] DataObject

codesaur экосистемийн өгөгдлийн давхаргын үндсэн компонент. Model класс дээр багануудаа тодорхойлоход хүснэгтийг анх ашиглах үед автоматаар үүсгэж, insert / update / select / delete үйлдлүүдийг MySQL, PostgreSQL, SQLite дээр адилхан кодоор гүйцэтгэнэ. LocalizedModel нь олон хэлний контентыг {table}_content хүснэгтэд салгаж хадгална. ORDER BY гэх мэт параметрчилэх боломжгүй байрлалд хэрэглэгчийн оролт орох үед модель өөрөө цагаан жагсаалт болж ажиллана (assertColumn, orderBy).

Онцлогууд
  • Model - нэг хүснэгтэд зориулсан загварын суурь класс
  • LocalizedModel - олон хэл дээрх контент ({table}_content) хадгалах
  • Column - баганын төрөл, урт, default, primary, unique, auto increment
  • Хүснэгтийг анх ашиглах үед автоматаар үүсгэх, __initial() hook
  • MySQL / PostgreSQL / SQLite нэг кодоор - Constants::DRIVER_*
  • getById, getRowWhere, getRows, countRows, insert, updateById, deleteById
  • assertColumn / assertDirection / quoteIdentifier / orderBy - ORDER BY, GROUP BY-д хэрэглэгчийн оролт оруулах цагаан жагсаалт (SQL injection хамгаалалт)
  • PDOTrait, TableTrait - дахин ашиглагдах PDO/хүснэгтийн үйлдлүүд

Үндсэн классууд

КлассҮүрэг
ModelНэг хүснэгтэд зориулсан загварын суурь класс
LocalizedModelОлон хэл дээрх контент хадгалах загварын суурь класс - orderBy() нь JOIN alias-тай нь буцаана
ColumnХүснэгтийн баганын бүтцийг тодорхойлох класс
ConstantsDriver, error code, column нэрсийн тогтмолууд
PDOTraitPDO үйлдлүүдийг төвлөрүүлсэн trait
TableTraitХүснэгттэй ажиллах үндсэн боломжууд ба баганын цагаан жагсаалтын trait

Жишээ код

use codesaur\DataObject\Model;
use codesaur\DataObject\Column;

class UserModel extends Model
{
    public function __construct(\PDO $pdo)
    {
        $this->setInstance($pdo);

        $this->setColumns([
           (new Column('id', 'bigint'))->primary(),
           (new Column('username', 'varchar', 64))->unique(),
            new Column('password', 'varchar', 255),
           (new Column('is_active', 'tinyint'))->default(1),
            new Column('created_at', 'datetime'),
        ]);

        $this->setTable('users');
    }
}

$pdo = new \PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$userModel = new UserModel($pdo);

// Нэмэх / Insert
$user = $userModel->insert([
    'username' => 'john',
    'password' => password_hash('secret', PASSWORD_DEFAULT),
    'created_at' => date('Y-m-d H:i:s'),
]);

// Унших / Read
$user = $userModel->getById(1);
$user = $userModel->getRowWhere(['username' => 'john']);
$total = $userModel->countRows(['WHERE' => 'is_active=1']);

// Эрэмбэлэлт: хэрэглэгчийн оролт баганын цагаан жагсаалтаар шүүгдэнэ
// Ordering: user input is filtered through the model column whitelist
$rows = $userModel->getRows([
    'ORDER BY' => $userModel->orderBy($_GET['sort'] ?? 'id', $_GET['dir'] ?? 'DESC')
]);

Тест ажиллуулах

composer test
[■] Info
Суулгах
composer require codesaur/dataobject
Шаардлага
  • PHP 8.2.1+
  • ext-pdo
  • MySQL / PostgreSQL / SQLite
  • Composer
Aikido оноо 100/100
Шалгасан: 2026-09-10
Холбоосууд