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, fără getteri/setteri manuali.
Caracteristici cheie:
- Modele tipate static (
public int $id,public ?DateTimeImmutable $created_at) - Atribute declarative:
#[Table],#[PrimaryKey],#[BelongsTo],#[HasMany],#[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
DateTimeImmutable,BcMath\Number,BackedEnum - Chei primare compuse
- Atribute calculate pe bulk (
#[Computable]) - Hook-uri de ciclu de viață (
beforeCreate,afterUpdate, etc.)
Stil vechi vs. stil nou
Dacă vii din vechiul ORM, iată diferența:
// ❌ Stil vechi
class Article extends FluxManagerModel
{
protected static string $__table = "articles";
protected static array $__primaryKeys = ['article_id'];
protected static ?string $__autoIncrement = 'article_id';
protected static ?array $__relationships = [
'article_type' => [
'relationship' => Model::MODEL_RELATIONSHIP_BELONGS_TO,
'model' => ArticleType::class,
'primary_key' => 'article_type_id',
'foreign_key' => 'article_type_id',
],
];
public ?int $article_id = null;
public int $article_type_id;
}
// ✅ Stil nou (Leto ORM)
#[Table("articles")]
class Article extends Model
{
#[PrimaryKey, AutoIncrement]
public int $article_id;
#[BelongsTo('article_type', ArticleType::class, 'article_type_id')]
public int $article_type_id;
}Mai concis, fără duplicare de câmpuri, totul într-un singur loc, autocomplete în IDE pe tipuri reale.