Salt la conținut

Schemă și migrări

Modelele Leto mapează tabele: un model descrie o tabelă existentă prin #[Table] și atributele de coloană, dar nu creează el însuși tabela. Deci trebuie să știi cum apare schema. Aceasta pagina explică cele trei căi și cine e responsabil de fiecare.

Maparea model-tabelă

Atributele unui model corespund 1-la-1 coloanelor din tabelă. Modelul declară ce se așteaptă să existe în baza de date:

#[Table('posts')]
class Post extends Model
{
    #[PrimaryKey, AutoIncrement]
    public int $id;      // id INT(11)

    #[Varchar(200)]
    public string $title; // title VARCHAR(200)

    #[Text]
    public string $body;  // body TEXT
}

Dacă tipul din model nu se potrivește cu coloana reală, ORM-ul semnalează la serializare. Atributele descriu schema, nu o generează. Pentru lista completă a atributelor de stocare, vezi Tipuri de stocare.

Calea 1: creezi tabela din DDL

Dacă pornești de la model (sau vrei control explicit), creezi tabela o singură dată cu DDL-ul fluent din Query Builder:

db()->createTable('posts')
    ->column('id', 'INT(11)')
    ->column('title', 'VARCHAR(200)')
    ->column('body', 'TEXT')
    ->primaryKey('id')
    ->autoIncrement('id')
    ->execute();

Pentru modificări ulterioare ai db()->alterTable('posts'). Coloanele din DDL trebuie să oglindească atributele modelului.

Calea 2: pornești de la o tabelă existentă

Dacă tabela există deja (creată prin SQL sau printr-un tool de migrare), pui doar #[Table] și atributele potrivite peste ea. Framework-ul poate și să inspecteze schema unei tabele existente (introspecție) pentru a construi descrierea modelului, ceea ce stă la baza generării de modele din baza de date.

Calea 3: sincronizare automată model ↔ tabelă

Generarea automată a unei tabele din model (sau a unui model din tabelă) și sistemul de migrări sunt oferite de platforma Workleto (workleto-bt), nu de pachetul leto/framework în sine. Acolo găsești comenzile de migrare și generarea de modele din tabele. La nivel de framework ai maparea model-tabelă, DDL-ul manual și introspecția de mai sus.

Ce folosești când

SituațieCale
Proiect nou, pornești de la modeleDDL manual (Calea 1), sau tooling-ul platformei (Calea 3)
Baza de date există dejaPui atribute peste tabele (Calea 2)
Vrei migrări versionate și sync automatTooling-ul platformei Workleto (Calea 3)