Download the PHP package andydefer/laravel-cluster without Composer
On this page you can find all versions of the php package andydefer/laravel-cluster. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download andydefer/laravel-cluster
More information about andydefer/laravel-cluster
Files in andydefer/laravel-cluster
Package laravel-cluster
Short Description A powerful cluster query parser and filter for Laravel with JSON column support
License
Informations about the package laravel-cluster
Laravel Cluster - Documentation Complète
Table des matières
- Installation
- Architecture du package
- Le moteur central : ClusterQuery
- Le service façade : ClusterService
- Structure des données : ClusterVO
- Eloquent Cast : ClusterCast
- La collection intelligente : ClusterVOCollection
- Filtrer des collections en mémoire
- Générer du SQL pour différents drivers
- Fonctions SQLite personnalisées
- Intégration avec Eloquent
- Les Macros Laravel
- Les fonctions SQL d'agrégation
- Les sous-conditions sur tableaux
- Les opérateurs EXISTS et NOT_EXISTS
- Les opérateurs LIKE et NOT_LIKE
- Les fonctions d'agrégation en mémoire
- Créer des fonctions personnalisées
- Parser et AST
- Référence des opérateurs
- Référence des méthodes de ClusterVOCollection
- Cas d'usage concrets
- Débogage et résolution des problèmes
- Performance et bonnes pratiques
1. Installation
1.1 Prérequis
- PHP 8.1 ou supérieur
- Laravel 10.x, 11.x, 12.x, 13.x, 14.x ou 15.x
1.2 Installation via Composer
1.3 Configuration
Le package s'enregistre automatiquement. Si vous utilisez une version de Laravel sans auto-discovery :
1.4 Structure du Service Provider
1.5 Injection de dépendances
2. Architecture du package
2.1 Flux de traitement d'une requête
2.2 Les composants clés
3. Le moteur central : ClusterQuery
ClusterQuery est le cœur du package. Il orchestre toutes les opérations.
3.1 Création
3.2 Parser une requête
3.3 Filtrer une collection en mémoire
3.4 Tester un cluster individuel
3.5 Générer du SQL
3.6 Appliquer à Eloquent
4. Le service façade : ClusterService
ClusterService est une façade qui délègue à ClusterQuery.
4.1 Création
4.2 Utilisation
4.3 Exemple dans un service Laravel
5. Structure des données : ClusterVO
ClusterVO est le conteneur qui aplatit automatiquement les données JSON pour un accès rapide.
5.1 Création d'un ClusterVO
5.2 Accès aux données
5.3 ArrayAccess
5.4 Création simplifiée avec ClusterVOProxy
6. Eloquent Cast : ClusterCast
6.1 Installation dans un modèle
6.2 Utilisation
7. La collection intelligente : ClusterVOCollection
7.1 Création
7.2 Filtres d'égalité
7.3 Filtres numériques
7.4 Filtres d'existence
7.5 Filtres sur chaînes
7.6 Filtres sur tableaux
7.7 Opérateurs logiques
7.8 Filtres personnalisés
7.9 Requêtes complètes avec whereQuery
7.10 Récupération des résultats
8. Filtrer des collections en mémoire
8.1 Exemple complet
9. Générer du SQL pour différents drivers
9.1 Drivers supportés
9.2 Conditions simples
9.3 Conditions avec AND/OR
9.4 Fonctions SQL
9.5 Sous-conditions
10. Fonctions SQLite personnalisées
10.1 Fonctions disponibles
| Fonction | Description | Exemple |
|---|---|---|
JSON_LENGTH |
Longueur d'un tableau JSON | JSON_LENGTH(clusters, '$.addresses') |
JSON_AVG |
Moyenne des valeurs numériques | JSON_AVG(clusters, '$.scores') |
JSON_SUM |
Somme des valeurs numériques | JSON_SUM(clusters, '$.prices') |
JSON_MIN |
Valeur minimale | JSON_MIN(clusters, '$.scores') |
JSON_MAX |
Valeur maximale | JSON_MAX(clusters, '$.scores') |
10.2 Utilisation
11. Intégration avec Eloquent
11.1 Utilisation de base
11.2 Conditions complexes
11.3 Combinaison avec Eloquent
11.4 Sous-conditions Eloquent
11.5 Fonctions SQL Eloquent
12. Les Macros Laravel
12.1 Macro sur Eloquent Builder
12.2 Macro sur Collection
12.3 Détection automatique du driver
13. Les fonctions SQL d'agrégation
13.1 Fonctions disponibles
| Fonction | Description | Exemple |
|---|---|---|
COUNT(path) |
Nombre d'éléments dans un tableau | COUNT(addresses) > 2 |
SUM(path) |
Somme des valeurs numériques | SUM(prices) > 500 |
AVG(path) |
Moyenne des valeurs numériques | AVG(scores) >= 85 |
MIN(path) |
Valeur minimale | MIN(scores) > 75 |
MAX(path) |
Valeur maximale | MAX(scores) < 95 |
LENGTH(path) |
Longueur d'une chaîne | LENGTH(name) > 5 |
JSON_LENGTH(path) |
Longueur d'un tableau JSON | JSON_LENGTH(addresses) > 2 |
13.2 Utilisation en mémoire
13.3 Utilisation avec Eloquent
13.4 SQL généré par driver
| Fonction | SQLite | MySQL | PostgreSQL |
|---|---|---|---|
COUNT |
json_array_length(clusters, '$.addresses') |
JSON_LENGTH(clusters, '$.addresses') |
jsonb_array_length(clusters->'addresses') |
SUM |
(SELECT SUM(json_extract(value, '$')) FROM json_each(clusters, '$.prices')) |
(SELECT SUM(JSON_EXTRACT(value, '$')) FROM JSON_TABLE(...)) |
(SELECT SUM((value->>'$')::numeric) FROM json_array_elements(...)) |
AVG |
(SELECT AVG(json_extract(value, '$')) FROM json_each(clusters, '$.scores')) |
(SELECT AVG(JSON_EXTRACT(value, '$')) FROM JSON_TABLE(...)) |
(SELECT AVG((value->>'$')::numeric) FROM json_array_elements(...)) |
MIN |
(SELECT MIN(json_extract(value, '$')) FROM json_each(clusters, '$.scores')) |
(SELECT MIN(JSON_EXTRACT(value, '$')) FROM JSON_TABLE(...)) |
(SELECT MIN((value->>'$')::numeric) FROM json_array_elements(...)) |
MAX |
(SELECT MAX(json_extract(value, '$')) FROM json_each(clusters, '$.scores')) |
(SELECT MAX(JSON_EXTRACT(value, '$')) FROM JSON_TABLE(...)) |
(SELECT MAX((value->>'$')::numeric) FROM json_array_elements(...)) |
LENGTH |
LENGTH(json_extract(clusters, '$.name')) |
LENGTH(JSON_EXTRACT(clusters, '$.name')) |
LENGTH(clusters->>'name') |
JSON_LENGTH |
json_array_length(clusters, '$.addresses') |
JSON_LENGTH(clusters, '$.addresses') |
jsonb_array_length(clusters->'addresses') |
14. Les sous-conditions sur tableaux
14.1 Syntaxe
14.2 Exemples en mémoire
14.3 Exemples avec Eloquent
15. Les opérateurs EXISTS et NOT_EXISTS
15.1 EXISTS (*)
15.2 NOT_EXISTS (#)
15.3 Utilisation avec Eloquent
16. Les opérateurs LIKE et NOT_LIKE
16.1 LIKE (=~)
16.2 NOT_LIKE (!~)
16.3 Utilisation avec Eloquent
17. Les fonctions d'agrégation en mémoire
17.1 Présentation des fonctions
Les fonctions d'agrégation en mémoire permettent d'effectuer des calculs sur les données des clusters sans générer de SQL. Elles sont utilisées avec les méthodes whereAggregate(), matchesAggregate() et getAggregateValue() de ClusterVOCollection.
17.2 Liste des fonctions d'agrégation
| Fonction | Description | Signature | Retourne |
|---|---|---|---|
COUNT |
Compte les éléments d'un tableau ou les caractères d'une chaîne | COUNT(path) |
int |
AVG |
Calcule la moyenne des valeurs numériques | AVG(path) |
float |
SUM |
Calcule la somme des valeurs numériques | SUM(path) |
float |
MIN |
Trouve la valeur numérique minimale | MIN(path) |
float |
MAX |
Trouve la valeur numérique maximale | MAX(path) |
float |
LENGTH |
Calcule la longueur d'une chaîne ou le nombre d'éléments | LENGTH(path) |
int |
EXISTS |
Vérifie qu'un chemin existe et n'est pas vide | EXISTS(path) |
bool |
IS_EMPTY |
Détermine si une valeur est vide | IS_EMPTY(path) |
bool |
HAS |
Recherche une valeur dans un tableau | HAS(path, value) ou HAS(path, key, value) |
bool |
ALL |
Vérifie que tous les éléments satisfont une condition | ALL(path, key, expectedValue) |
bool |
MATCHES |
Recherche une valeur correspondant à une regex | MATCHES(path, regex) ou MATCHES(path, key, regex) |
bool |
GROUP |
Groupe des expressions pour la logique booléenne | GROUP({expr1} & {expr2}) |
bool |
17.3 Utilisation de whereAggregate
17.4 Utilisation de whereAggregateDirect
17.5 Évaluation sur un cluster spécifique
17.6 Validation d'expressions
17.7 Exemple complet avec toutes les fonctions
18. Créer des fonctions personnalisées
18.1 Fonction d'agrégation personnalisée
18.2 Enregistrement de la fonction
18.3 Fonction SQL personnalisée
18.4 Enregistrement SQL personnalisé
19. Parser et AST
19.1 Structure de l'AST
19.2 Manipulation de l'AST
19.3 Génération SQL depuis l'AST
19.4 Cache du Parser
20. Référence des opérateurs
20.1 Opérateurs de comparaison
| Opérateur | Description | Exemple |
|---|---|---|
= |
Égalité | status=active |
!= |
Différent | status!=inactive |
< |
Inférieur | age<18 |
> |
Supérieur | age>18 |
<= |
Inférieur ou égal | age<=18 |
>= |
Supérieur ou égal | age>=18 |
=~ |
LIKE (insensible à la casse) | name=~John% |
!~ |
NOT LIKE (insensible à la casse) | name!~John% |
20.2 Opérateurs logiques
| Opérateur | Description | Exemple |
|---|---|---|
& ou AND |
ET logique | status=active & role=admin |
\| ou OR |
OU logique | status=active | role=admin |
! ou NOT |
Négation | !deleted |
20.3 Opérateurs spéciaux
| Opérateur | Description | Exemple |
|---|---|---|
* |
EXISTS - La clé existe | *email |
# |
NOT_EXISTS - La clé est absente | #deleted_at |
20.4 Parenthèses
21. Référence des méthodes de ClusterVOCollection
21.1 Filtres d'égalité
21.2 Filtres d'existence
21.3 Filtres numériques
21.4 Filtres sur chaînes
21.5 Filtres sur tableaux
21.6 Filtres personnalisés
21.7 Requêtes textuelles
21.8 Agrégations en mémoire
21.9 Récupération
22. Cas d'usage concrets
22.1 Filtrage de clients B2B
22.2 Filtrage de produits e-commerce
22.3 Filtrage d'utilisateurs avec compétences
22.4 API REST avec filtrage dynamique
22.5 Filtrage en mémoire pour export
23. Débogage et résolution des problèmes
23.1 Vérifier la syntaxe d'une requête
23.2 Valider une expression d'agrégation
23.3 Afficher le SQL généré
23.4 Tester une requête sur un cluster spécifique
23.5 Problèmes courants
| Problème | Cause | Solution |
|---|---|---|
| Syntax error | Requête mal formée | Vérifier les parenthèses et les opérateurs |
| Valeurs entre guillemets | Guillemets dans la requête | Supprimer les guillemets : status=active |
| Fonction inconnue | Fonction non enregistrée | Ajouter la fonction au registre |
| Tableau vide attendu | whereArrayEmpty sur tableau non vide |
Vérifier la structure du tableau |
| Driver non supporté | Driver inconnu | Utiliser MySQL, PostgreSQL ou SQLite |
| Résultat inattendu | Comportement de l'opérateur | Vérifier la casse des valeurs |
24. Performance et bonnes pratiques
24.1 Performance en mémoire
24.2 Performance en base de données
24.3 Optimisation des requêtes
24.4 Bonnes pratiques
24.5 Conservation de la mémoire
25. Licence
MIT © Andy Defer
All versions of laravel-cluster with dependencies
laravel/framework Version ^12.0|^13.0|^14.0|^15.0
andydefer/laravel-actions Version ^2.11.17