belongsTo(LieuType::class); } public function parent(): BelongsTo { return $this->belongsTo(Lieu::class, 'lieu_parent_id'); } public function enfants(): HasMany { return $this->hasMany(Lieu::class, 'lieu_parent_id'); } public function sections(): HasMany { return $this->hasMany(Section::class); } public function calculerNomLong(): string { $noms = [$this->nom]; $parent = $this->parent; while ($parent) { $noms[] = $parent->nom; $parent = $parent->parent; } return implode(', ', $noms); } protected static function booted(): void { $recalc = function (Lieu $lieu) { $lieu->nom_long = $lieu->calculerNomLong(); }; static::creating($recalc); static::updating($recalc); } }