Download the PHP package andydefer/laravel-rattachments without Composer

On this page you can find all versions of the php package andydefer/laravel-rattachments. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package laravel-rattachments

Laravel Rattachments

Un système de rattachement polymorphique double pour applications Laravel

Un package Laravel complet pour gérer des relations polymorphiques doubles entre n'importe quels modèles Eloquent, avec des rôles contextuels, des métadonnées, un système de contraintes avancé et des hooks de cycle de vie.


📋 Table des matières


🎯 Problématique et solution

Le problème

Dans les applications modernes, les relations entre entités sont rarement simples et unidirectionnelles. Les besoins courants incluent :

Les solutions traditionnelles (tables de liaison spécifiques) conduisent à :

Le résultat :


La solution

Laravel Rattachments propose une approche élégante : une seule table polymorphique pour gérer tous les types de relations.

Le principe :

Pourquoi c'est révolutionnaire ?


✨ Fonctionnalités


🚀 Installation

Publier les migrations

Exécuter les migrations


🎯 Concept fondamental

Qu'est-ce qu'un rattachement ?

Un rattachement est une relation polymorphique double entre deux modèles Eloquent. Il est représenté par un enregistrement dans la table rattachments qui stocke :

Exemple concret


🔄 Double polymorphisme

Qu'est-ce que le double polymorphisme ?

Le package permet de rattacher n'importe quel modèle à n'importe quel autre modèle, dans les deux sens :

Pourquoi c'est puissant ?

Approche traditionnelle Laravel Rattachments
User::friends() $user->getTargetsByType(User::class)
User::follows() $user->getTargetsByType(User::class, FollowRole::FOLLOWER)
User::blocks() $user->getTargetsByType(User::class, BlockRole::BLOCKED)
Post::tags() $post->getTargetsByType(Tag::class)
Doctor::hospitals() $doctor->getTargetsByType(Hospital::class)

Une seule méthode, des résultats infinis !


🔒 Les contraintes

L'interface RattachmentInterface permet à vos modèles de définir trois types de contraintes.

1. Cibles autorisées (allowedTargets)

Définit quels modèles peuvent être attachés et avec quels rôles.

2. Cibles uniques granulaires (uniqueTargets)

Limite un modèle à un seul rattachement par type et/ou rôle.

Exemple concret :

3. Cibles interdites (disallowedTargets)

Bloque des cibles ou des rôles spécifiques (priorité maximale).


🏷️ Rôles contextuels

Pourquoi des rôles contextuels ?

Dans une application, le même terme ("admin") peut avoir des significations différentes :

Les rôles contextuels permettent de définir des enums spécifiques à chaque contexte.


🔄 Résolution dynamique des rôles

Comment ça fonctionne ?

Le package résout automatiquement le bon enum en fonction du contexte :

Avantages

UnknownRole

Si un rôle n'est plus autorisé par les contraintes actuelles, l'accesseur retourne une instance de UnknownRole :


🔌 Système de hooks

Le package expose un système de hooks permettant d'intervenir à chaque étape du cycle de vie d'un attachement.

Interface AttachmentHookInterface

Tous les modèles implémentant RattachmentInterface héritent de AttachmentHookInterface et peuvent surcharger les méthodes suivantes :

Hook Déclenchement
beforeAttach() Avant la création d'un attachement
afterAttach() Après la création d'un attachement
beforeDetach() Avant la suppression d'un attachement
afterDetach() Après la suppression d'un attachement
beforeUpdateRole() Avant la mise à jour d'un rôle
afterUpdateRole() Après la mise à jour d'un rôle
beforeUpdateMetadata() Avant la mise à jour des métadonnées
afterUpdateMetadata() Après la mise à jour des métadonnées
beforeDetachAll() Avant la suppression de tous les attachements
afterDetachAll() Après la suppression de tous les attachements

Position du modèle

Chaque hook reçoit un paramètre HookPosition qui indique si le modèle est le rattachable (celui qui attache) ou le target (celui qui est attaché) :

Exemple d'implémentation


📖 Utilisation avec le service

Injection du service

Créer un rattachement

Rattachement multiple

Supprimer un rattachement

Vérifier l'existence

Récupérer les rattachements

Pagination

Compter

Mettre à jour

Synchroniser

Rôles distincts

Attachements entre types


📖 Utilisation avec le trait

Le trait HasRattachments offre une API fluide directement sur vos modèles.

Ajouter le trait

API fluide

Récupérer dans les deux sens

Compter les relations

Méthodes métier explicites

Créez des méthodes métier pour une sémantique claire :


💡 Exemples concrets

Exemple 1 : Réseau social - Amitiés

Exemple 2 : Réseau social - Abonnements

Exemple 3 : Gestion de contenu - Tags

Exemple 4 : Relations professionnelles avec hooks


🎯 Cas d'usage

Réseau social

Relation Rattachable → Target Rôle
Amitié User → User FriendRole::FRIEND
Abonnement User → User FollowRole::FOLLOWER
Blocage User → User BlockRole::BLOCKED
Invitation Group → User InviteRole::PENDING
Acceptation User → Group InviteRole::ACCEPTED

Santé

Relation Rattachable → Target Rôle
Médecin → Hôpital Doctor → Hospital HospitalRole::DOCTOR
Patient → Médecin Patient → Doctor PatientRole::PATIENT
Spécialité → Médecin Specialty → Doctor SpecialtyRole::PRIMARY
Ordonnance → Patient Prescription → Patient PrescriptionRole::ACTIVE

Contenu

Relation Rattachable → Target Rôle
Article → Tag Post → Tag TagRole::PRIMARY
Article → Catégorie Post → Category CategoryRole::MAIN
Article → Auteur Post → User AuthorRole::AUTHOR
Commentaire → Article Comment → Post CommentRole::APPROVED

Entreprise

Relation Rattachable → Target Rôle
Employé → Entreprise Employee → Company EmployeeRole::MANAGER
Employé → Projet Employee → Project ProjectRole::LEAD
Projet → Client Project → Client ClientRole::ACTIVE
Tâche → Employé Task → Employee TaskRole::ASSIGNED

📋 Règles du système

Règle 1 : Toute relation est orientée


Règle 2 : Les modèles doivent implémenter l'interface


Règle 3 : Le rôle est obligatoire


Règle 4 : disallowedTargets a priorité sur allowedTargets

Résultat :


Règle 5 : Circularité - INTERDITE

Deux modèles ne peuvent pas s'autoriser mutuellement avec le même rôle.

Exceptions :


Règle 6 : Auto-attachement - INTERDIT


Règle 7 : Ordre de validation


Règle 8 : Résumé des contraintes

Contrainte Priorité
disallowedTargets 🔴 Maximale
uniqueTargets 🟡 Élevée
allowedTargets 🟢 Normale

Règle 9 : Bonnes pratiques

Une direction unique

Interdire la mauvaise direction

Ne pas contredire allowedTargets

Symétrie explicite


🔍 Inspection CLI

Commandes

Exemple de sortie - rattachments:inspect

Exemple de sortie - rattachments:inspect avec --ignore-missing

Exemple de sortie - rattachments:circularity

Sans --ignore-skipped (affichage complet)

Avec --ignore-skipped (sortie épurée)

Options des commandes

rattachments:inspect

Option Description
--constraints Affiche uniquement les contraintes (allowedTargets, uniqueTargets, disallowedTargets)
--connections Affiche uniquement les connexions existantes en base
--ignore-missing Masque les suggestions de relations manquantes

rattachments:circularity

Option Description
--ignore-skipped Masque les éléments "Skipped" (même classe, n'implémente pas l'interface) pour une sortie plus épurée

Alias disponibles

Commande Alias Description
rattachments:inspect ri Inspection des contraintes et connexions
rattachments:circularity rc Détection de circularité
rattachments:circularity rattachments:check-circularity Détection de circularité (nom long)

📦 Dépendances


📄 Licence

MIT © Andy Defer


Construit avec ❤️ pour la communauté Laravel


All versions of laravel-rattachments with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
laravel/framework Version ^12.0|^13.0|^14.0|^15.0
andydefer/laravel-directive Version ^3.67.16
andydefer/laravel-repository Version ^2.17.36
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package andydefer/laravel-rattachments contains the following files

Loading the files please wait ...