Download the PHP package astral-php/astral-extend-orm without Composer
On this page you can find all versions of the php package astral-php/astral-extend-orm. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download astral-php/astral-extend-orm
More information about astral-php/astral-extend-orm
Files in astral-php/astral-extend-orm
Package astral-extend-orm
Short Description Extension ORM pour Astral — Fillable, Casts, Accessors, Hidden, Relations déclaratives
License MIT
Homepage https://github.com/astral-php/astral-extend-orm
Informations about the package astral-extend-orm
astral-php/astral-extend-orm
Extension ORM pour Astral — Enrichit les modèles existants sans toucher au framework.
À propos
astral-extend-orm est une extension opt-in pour Astral MVC.
Elle ajoute sur les modèles les capacités qui manquent au système anémique de base :
| Feature | Description |
|---|---|
HasFillable |
Hydratation de masse sécurisée via liste blanche |
HasCasts |
Conversion de types déclarative (datetime, bool, array…) |
HasAccessors |
Accessors et Mutators par convention de nommage |
HasHidden |
Sérialisation contrôlée toArray() / toJson() avec $hidden / $visible |
HasRelations |
Relations déclaratives (belongsTo, hasMany) — sans lazy-loading |
Philosophie :
- Zéro magie (
__get/__setnon surchargés) - Compatibilité ascendante totale — DAOs, migrations, routes inchangés
- Opt-in par modèle — chaque modèle choisit ses traits
- Dans l'esprit Astral : explicite, lisible, testable
Installation
Requiert PHP 8.1+ et une app basée sur
astral-php/astral-core^1.2.
Démarrage rapide
1. Faire hériter votre modèle de Model
Remplacez la classe parente de vos modèles Astral :
2. Aucune modification requise ailleurs
Les DAOs, les migrations, les routes et les providers restent inchangés.
PDO::FETCH_CLASS continue de fonctionner normalement puisque Model est une
classe PHP ordinaire avec des propriétés publiques.
Référence complète
HasFillable — Hydratation de masse
Permet d'hydrater un modèle depuis un tableau (ex: $request->body) en n'autorisant
que les champs déclarés dans $fillable.
Configuration
Usage
API
| Méthode | Description |
|---|---|
fill(array $data): static |
Hydrate l'instance, retourne $this |
isFillable(string $key): bool |
Vérifie si un champ est dans $fillable |
getFillable(): array |
Retourne la liste $fillable |
static make(array $data): static |
Crée + hydrate en une ligne |
static collection(array $rows): array |
Crée une liste d'instances depuis un tableau de tableaux |
Les champs absents de
$fillablesont ignorés silencieusement.
id,created_at,updated_atne doivent généralement pas être dans$fillable.
HasCasts — Conversion de types
Déclare les conversions de types sur les propriétés du modèle.
Approche explicite : cast() — pas de __get magique.
Types supportés
| Type | Conversion |
|---|---|
'int' / 'integer' |
(int) |
'float' / 'double' |
(float) |
'bool' / 'boolean' |
(bool) |
'string' |
(string) |
'array' |
json_decode() si string, sinon retour direct |
'datetime' |
DateTimeImmutable depuis string, int (timestamp) ou DateTimeInterface |
'date' |
DateTimeImmutable à minuit |
'timestamp' |
int Unix timestamp |
Configuration
Usage
API
| Méthode | Description |
|---|---|
cast(string $field): mixed |
Retourne la valeur castée (ou brute si pas de cast déclaré) |
castAll(): array |
Retourne tous les champs avec casts appliqués |
hasCast(string $field): bool |
Vérifie si un cast est déclaré |
getCastType(string $field): ?string |
Retourne le type de cast déclaré |
cast()retournenullsi la valeur de la propriété estnull.
UneCastExceptionest levée si le type de cast est inconnu.
HasAccessors — Accessors & Mutators
Définit des champs calculés (accessors) et des transformations à l'écriture (mutators)
par convention de nommage.
Approche explicite : get() / set() — pas de __get/__set.
Convention
field_name (snake_case) est converti en FieldName (StudlyCase) automatiquement.
Exemple — Modèle User
Usage
API
| Méthode | Description |
|---|---|
get(string $field): mixed |
Accessor si défini, sinon propriété brute |
set(string $field, mixed $value): static |
Mutator si défini, sinon assignation directe |
hasAccessor(string $field): bool |
Vérifie si un accessor existe |
hasMutator(string $field): bool |
Vérifie si un mutator existe |
HasHidden — Sérialisation contrôlée
Contrôle les champs exposés lors de la sérialisation en tableau ou JSON.
Essentiel pour les réponses API : éviter d'exposer password, remember_token, etc.
Mode $hidden (liste noire — recommandé)
Mode $visible (liste blanche — strict)
Usage
API
| Méthode | Description |
|---|---|
toArray(array $except = []): array |
Tableau filtré selon $visible / $hidden |
toJson(int $flags = 0): string |
JSON filtré (accepte JSON_PRETTY_PRINT etc.) |
withHidden(): array |
Tableau complet sans aucune exclusion |
Les propriétés internes des traits (
fillable,casts,hidden,visible) sont toujours exclues detoArray()etwithHidden().
HasRelations — Relations déclaratives
Déclare les relations sur le modèle (sens sémantique), résout explicitement dans le contrôleur ou le DAO (pas de lazy-loading, pas de N+1 involontaire).
BelongsTo — N→1
HasMany — 1→N
Eager Loading — évite le problème N+1
Pour charger les relations d'une liste d'entités sans N+1, utilisez HasMany::eagerLoad() :
Total : 2 requêtes quelle que soit la taille de la liste.
Auto-déduction du nom de table
belongsTo et hasMany devinent le nom de table si vous ne le fournissez pas :
| Classe | Table déduite |
|---|---|
Category |
categories |
Article |
articles |
Tag |
tags |
CategoryType |
category_types |
Si votre table ne suit pas cette convention, passez le nom explicitement.
API
BelongsTo
| Méthode | Description |
|---|---|
resolve(PDO $pdo): ?object |
Exécute la requête, retourne l'entité ou null |
HasMany
| Méthode | Description |
|---|---|
resolve(PDO $pdo): array |
Exécute la requête, retourne la liste |
static eagerLoad(...): array |
Charge les relations de toute une liste (2 requêtes) |
Exemples complets
Modèle Article complet
Modèle User complet
Contrôleur — store() avec fill
Contrôleur API — réponse sérialisée
Vue — affichage avec cast
Utilisation des traits individuellement
Si vous ne souhaitez pas hériter de Model, vous pouvez utiliser chaque trait séparément
sur vos propres classes :
Tests
Structure du dépôt
Tests
Suite obligatoire avant publication Packagist / tag.
Compatibilité
| astral-core | PHP | astral-extend-orm |
|---|---|---|
| ^1.2 | 8.1 → 8.4 | 0.x |
Licence
MIT — voir LICENSE