Skip to main content

Model

propriétés dans un Model Laravel

Un Model Eloquent dans Laravel peut contenir plusieurs propriétés utiles. Voici une liste complète avec explications et petits exemples.

1. $table

Permet de définir le nom de la table associée au modèle si ce n’est pas le pluriel du nom du modèle.

protected $table = 'courses';

2. $primaryKey

Définit la clé primaire du modèle.

protected $primaryKey = 'course_id';

3. $fillable

Liste blanche des attributs pouvant être remplis par assignation massive.

protected $fillable = ['name', 'description', 'color'];

4. $guarded

Inverse de $fillable : liste noire des attributs protégés.

protected $guarded = ['id'];

5. $hidden

Cache des attributs lorsqu’un modèle est converti en JSON ou en tableau.

protected $hidden = ['created_at', 'updated_at'];

6. $visible

Liste explicite des attributs à rendre visibles (le reste est caché).

protected $visible = ['name', 'description'];

7. $casts

Convertit automatiquement les types des attributs.

protected $casts = [
'is_active' => 'boolean',
'created_at' => 'datetime',
];

8. $dates (⚠️ obsolète depuis Laravel 7+)

Ancienne façon de caster les dates (remplacée par $casts).

protected $dates = ['created_at', 'updated_at'];

9. $appends

Ajoute des attributs calculés (via accessors) lors de la sérialisation.

protected $appends = ['full_title','total'];

public function getFullTitleAttribute()
{
return $this->name . ' - ' . $this->full_name;
}

Un append :

  • n’existe pas dans la base
  • n’est pas stocké dans l’objet
  • est calculé à la volée
  • ->sum('champ') ne marche PAS avec un append
    • Laravel ne peut pas l’additionner automatiquement: $collection->sum('total'); // ❌ 0 ou erreur
  • Ce qui fonctionne avec append : sum() avec callback
    • $total = $collection->sum(fn ($item) => $item->total);
    • Fonctionne avec :
      • append
      • accessor
      • propriété calculée
  • manuellement;
$total = 0;
foreach ($collection as $item) {
$total += $item->total_global;
}

Règles d'or

  • Si tu dois faire un sum() → la valeur DOIT être une colonne BD
  • voir: withSum c'est très simple

10. $timestamps

Active ou désactive les timestamps automatiques (created_at et updated_at).

public $timestamps = true; // ou false

11. $incrementing

Indique si la clé primaire s’incrémente automatiquement.

public $incrementing = false;

12. $keyType

Type de la clé primaire (int ou string, souvent pour UUID).

protected $keyType = 'string';

13. $connection

Permet de définir une connexion différente de celle par défaut.

protected $connection = 'mysql2';

14. $with

Charge automatiquement certaines relations à chaque requête.

protected $with = ['documents', 'chapters'];

15. $touches

Met à jour automatiquement updated_at du parent lors d’une modification.

protected $touches = ['course'];

16. $attributes

Définit des valeurs par défaut pour certains attributs.

protected $attributes = [
'is_active' => true,
];

✅ Exemple complet

class Course extends Model
{
protected $table = 'courses';
protected $primaryKey = 'course_id';
public $timestamps = true;

protected $fillable = ['name', 'full_name', 'description', 'color'];
protected $hidden = ['created_at', 'updated_at'];
protected $casts = ['is_active' => 'boolean'];
protected $appends = ['full_title'];
protected $with = ['chapters'];

public function getFullTitleAttribute()
{
return $this->name . ' - ' . $this->full_name;
}

public function chapters()
{
return $this->hasMany(Chapter::class);
}
}

📚 Références