ORM
ORM-ul Leto este un ORM modern cu atribute PHP 8, conceput pentru productivitate maximă. Modelele sunt clase PHP pure cu proprietăți publice tipate, fără array-uri de configurare și fără getteri/setteri manuali.
Un model este o clasă care extinde Model, cu proprietăți publice tipate și atribute care descriu tabela:
use Leto\Database\ORM\Model;
use Leto\Database\ORM\Attributes\Table;
use Leto\Database\ORM\Attributes\PrimaryKey;
use Leto\Database\ORM\Attributes\AutoIncrement;
use Leto\Database\ORM\Attributes\DataStorage\Varchar;
#[Table('articles')]
class Article extends Model
{
#[PrimaryKey, AutoIncrement]
public int $id;
#[Varchar(200)]
public string $title;
}Atât. De aici poți deja salva și interoga:
$article = new Article();
$article->title = 'Primul articol';
$article->create();
$articles = Article::where('title', 'LIKE', 'Primul%')->get();Modelele mapează tabele care există deja în baza de date. Vezi Quickstart pentru cum apar tabelele (schema și migrările sunt gestionate de platformă, nu de ORM).
Caracteristici cheie:
- Modele tipate static (
public int $id,public ?DateTimeImmutable $created_at) - Atribute declarative:
#[Table],#[PrimaryKey],#[BelongsTo],#[HasMany],#[HasOne],#[HasManyThrough],#[Varchar(100)] - Query builder fluid:
Student::where('status', 'active')->orderBy('created_at', Order::DESC)->paginate(1, 20) - Eager loading cu
with(), rezolvă N+1 - Suport nativ pentru
DateTimeInterface,BcMath\Number,BackedEnum - Chei primare compuse
- Atribute calculate (
#[Computable]) - Hook-uri de ciclu de viață prin atribute PHP 8 (
#[BeforeCreate],#[AfterUpdate], etc.) - Dirty Tracking:
isDirty(),getDirty(),getOriginal()pe orice model - Trait-uri funcționale:
HasTimestamps,HasRecompute,HasValidation,HasOrder - Protecție PK auto-increment:
update()blochează modificarea coloanelor#[AutoIncrement] - Valori implicite:
#[DefaultValue]și#[DefaultExpression]pentru coloane - Access Control (ACL):
#[ACLModel],#[ACLField], handleri dinamici per instanță
Cum citești această secțiune
Paginile sunt ordonate ca un parcurs: pornește de la Modelul minimal, continuă cu atributele și tipurile de stocare, apoi operațiunile CRUD și relațiile. Hook-urile, trait-urile funcționale, atributele calculate și ACL sunt subiecte mai avansate, la final.
Vii din vechiul ORM (
FluxManagerModel)? Leto înlocuiește array-urile de configurare ($__table, $__primaryKeys, $__relationships) cu atribute PHP 8 pe proprietăți tipate: aceeași definiție, mult mai concisă, într-un singur loc și cu autocomplete real în IDE.