PHPackages                             axn/laravel-models-organizer - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. axn/laravel-models-organizer

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

axn/laravel-models-organizer
============================

Organize Laravel models concerns (relations, scopes, attributes) in dedicated traits.

1.0.1(1mo ago)012MITPHPPHP ^8.4

Since Jun 12Pushed 1mo agoCompare

[ Source](https://github.com/AXN-Informatique/laravel-models-organizer)[ Packagist](https://packagist.org/packages/axn/laravel-models-organizer)[ Docs](https://github.com/AXN-Informatique/laravel-models-organizer)[ RSS](/packages/axn-laravel-models-organizer/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (2)Dependencies (10)Versions (3)Used By (0)

Laravel Models Organizer
========================

[](#laravel-models-organizer)

Package Laravel permettant d’organiser automatiquement le code des modèles Eloquent en déplaçant les relations, scopes et attributes dans des traits dédiés.

Installation
------------

[](#installation)

```
composer require axn/laravel-models-organizer
```

Utilisation
-----------

[](#utilisation)

Analyser tous les modèles :

```
php artisan models:organize
```

Analyser un modèle précis :

```
php artisan models:organize "App\Models\Article"
```

Simuler les modifications sans écrire les fichiers :

```
php artisan models:organize --dry-run
```

Objectif
--------

[](#objectif)

La commande déplace automatiquement :

- les relations Eloquent vers `Relations.php`
- les scopes vers `Scopes.php`
- les accessors / mutators / attributes vers `Attributes.php`

Exemple :

```
app/
└── Models/
    ├── Article.php
    └── Concerns/
        └── Article/
            ├── Relations.php
            ├── Scopes.php
            └── Attributes.php
```

Pour un modèle dans un sous-namespace :

```
app/
└── Models/
    ├── Catalogue/
    │   └── Article.php
    └── Concerns/
        └── Catalogue/
            └── Article/
                ├── Relations.php
                ├── Scopes.php
                └── Attributes.php
```

Règles de détection
-------------------

[](#règles-de-détection)

### Relations

[](#relations)

Une méthode est considérée comme relation si :

- son type de retour commence par `Illuminate\Database\Eloquent\Relations\`
- ou si elle retourne explicitement une relation Eloquent via `$this->belongsTo(...)`, `$this->hasMany(...)`, etc.

### Scopes

[](#scopes)

Une méthode est considérée comme scope si :

- son nom commence par `scope`
- ou si elle possède l’attribut `#[Scope]`

### Attributes

[](#attributes)

Une méthode est considérée comme attribute si :

- son nom respecte `get*Attribute`
- son nom respecte `set*Attribute`
- ou si son type de retour est `Illuminate\Database\Eloquent\Casts\Attribute`

Traits analysés
---------------

[](#traits-analysés)

La commande analyse :

- les méthodes directement déclarées dans le modèle
- les méthodes déclarées dans les traits utilisés par le modèle
- les méthodes déclarées dans les traits imbriqués

Les traits vendor sont ignorés.

Méthodes surchargées
--------------------

[](#méthodes-surchargées)

Si une méthode est déclarée à plusieurs niveaux, seule la version finale réellement utilisée par le modèle est copiée.

Priorité :

1. méthode déclarée dans le modèle
2. méthode déclarée dans un trait directement utilisé par le modèle
3. méthode déclarée dans un trait imbriqué

Les anciennes versions surchargées sont supprimées de leurs traits sources lorsqu’elles deviennent inutiles.

Suppression des traits vides
----------------------------

[](#suppression-des-traits-vides)

Lorsqu’un ancien trait ne contient plus aucune méthode après déplacement, son fichier est supprimé.

La directive `use AncienTrait;` est également retirée du modèle.

Les dossiers vides dans `app/Models` sont supprimés automatiquement en fin de traitement.

Suppression des traits inutilisés
---------------------------------

[](#suppression-des-traits-inutilisés)

La commande peut également supprimer les traits présents dans `app/Models` qui ne sont plus utilisés par aucun modèle.

Attention : un trait est considéré comme inutilisé uniquement s’il n’est utilisé directement ou récursivement par aucun modèle Eloquent détecté dans `app/Models`.

Imports
-------

[](#imports)

La commande conserve les imports nécessaires, y compris les alias :

```
use Axn\Multilingual\Models\Language as BaseModel;
```

Les classes situées dans le même namespace que la méthode source sont également ajoutées automatiquement au trait généré si nécessaire.

Exemple
-------

[](#exemple)

Avant :

```
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Article extends Model
{
    public function rubrique(): BelongsTo
    {
        return $this->belongsTo(Rubrique::class);
    }
}
```

Après :

```
namespace App\Models;

use App\Models\Concerns\Article\Relations;
use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    use Relations;
}
```

```
namespace App\Models\Concerns\Article;

use App\Models\Rubrique;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

trait Relations
{
    public function rubrique(): BelongsTo
    {
        return $this->belongsTo(Rubrique::class);
    }
}
```

Sécurité
--------

[](#sécurité)

Une fois la commande exécutée, vérifier les messages d’informations de la commande :

- Si pour un modèle est affiché le message « Trait conservé car il contient encore des méthodes », c’est peut-être parce que ce trait contient des relations qui n’ont pas pu être identifiées en tant que telles et qui doivent donc être déplacées manuellement.
- Si pour un modèle est affiché un message en rouge, c’est qu’une erreur a empêché le traitement de ce modèle. Une révision manuelle est alors nécessaire.

Une fois les corrections effectuées, exécutez la commande `composer dump` et corrigez l’erreur qui remonte. Il se peut par exemple que deux relations portant le même nom aient été rapatriées dans le trait `Relations` d’un modèle. Effectuez cette étape jusqu’à ce qu’il n’y ait plus d’erreur.

Optionnellement, faites une vérification avec le package `axn/laravel-models-scanner`.

Enfin, exécutez la commande `pint` pour supprimer les blancs laissés par les déplacements ainsi que les imports non utilisés.

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance90

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

46d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1314974?v=4)[Axel Neumann](/maintainers/axn)[@axn](https://github.com/axn)

---

Top Contributors

[![lgtaxn](https://avatars.githubusercontent.com/u/23211553?v=4)](https://github.com/lgtaxn "lgtaxn (3 commits)")

###  Code Quality

Static AnalysisRector

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/axn-laravel-models-organizer/health.svg)

```
[![Health](https://phpackages.com/badges/axn-laravel-models-organizer/health.svg)](https://phpackages.com/packages/axn-laravel-models-organizer)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3345.3M348](/packages/psalm-plugin-laravel)[blair2004/nexopos

The Free Modern Point Of Sale System build with Laravel, TailwindCSS and Vue.js.

1.2k2.4k](/packages/blair2004-nexopos)[v.chetkov/php-clean-architecture

PHP Clean Architecture

14661.3k](/packages/vchetkov-php-clean-architecture)[boundwize/structarmed

Configurable PHP architecture guards — define your layers and rules, then keep them enforced

45629.2k26](/packages/boundwize-structarmed)[stillat/proteus

Provides utilities for parsing and updating Laravel-style PHP configuration files.

18354.7k41](/packages/stillat-proteus)[drupal-code-builder/drupal-code-builder

Code generator for Drupal

27253.3k1](/packages/drupal-code-builder-drupal-code-builder)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
