Salt la conținut

Atribute pe clasă

Atributele de clasă se pun deasupra declarației modelului și configurează maparea la tabelă și comportamentul lui implicit: numele tabelei, conexiunea, cheia primară, valorile implicite la nivel de coloană și ordinea implicită a rezultatelor.

#[Table]

Leagă modelul de o tabelă din baza de date.

#[Table('users')]
class User extends Model
{
}

#[ConnectionName]

Specifică o conexiune la baza de date diferită de cea implicită (default).

#[Table('orders')]
#[ConnectionName('warehouse')]
class Order extends Model
{
}

Conexiunea warehouse trebuie definită în config/database.php:

return [
    'default' => [
        'driver' => 'mysql',
        'host' => 'localhost',
        'database' => 'app',
        // ...
    ],
    'warehouse' => [
        'driver' => 'mysql',
        'host' => '10.0.0.5',
        'database' => 'warehouse',
        // ...
    ],
];

#[PrimaryKey]

Marchează cheia primară a tabelei.

#[PrimaryKey]
public int $id;

#[AutoIncrement]

Indică faptul că cheia primară este auto-incrementată (nu se trimite la INSERT).

#[PrimaryKey]
#[AutoIncrement]
public int $id;

#[DefaultOrder]

Definește ordonarea implicită pentru toate interogările pe acest model. Suportă atribute multiple și necesită enum-ul Order:

use Leto\Database\ORM\Enums\Order;

#[Table('products')]
#[DefaultOrder('name', Order::ASC)]
#[DefaultOrder('created_at', Order::DESC)]
class Product extends Model
{
}

#[DefaultValue]

Definește o valoare implicită la nivel de coloană în baza de date (CREATE TABLE DEFAULT). Este DDL-only: nu afectează logica de inserție din PHP. Primește o valoare PHP literală: string, int, bool, etc.:

use Leto\Database\ORM\Attributes\DefaultValue;

#[DefaultValue('guest')]
public string $role;

#[DefaultValue(0)]
public int $login_count;

#[DefaultValue(true)]
public bool $active;

#[DefaultExpression]

Definește o expresie SQL raw ca valoare implicită (DEFAULT <expresie>). Utilă pentru funcții native ale bazei de date (current_timestamp(), uuid(), etc.). Expresia este inserată direct în DDL, fără escaping sau ghilimele:

use Leto\Database\ORM\Attributes\DefaultExpression;

#[DefaultExpression("current_timestamp()")]
public string $created_at;

#[DefaultExpression("(uuid())")]
public string $id;

Notă: #[DefaultExpression] este echivalent cu un DEFAULT <expresie> raw în SQL. Ai grijă la portabilitate: expresiile diferă între MySQL, PostgreSQL etc.