{"id":36386998,"url":"https://github.com/r0mdau/jisly","last_synced_at":"2026-01-11T15:03:28.282Z","repository":{"id":38095349,"uuid":"73577843","full_name":"r0mdau/jisly","owner":"r0mdau","description":"The smallest PHP NoSQL database library, flat file JSON.","archived":false,"fork":false,"pushed_at":"2024-12-09T02:54:48.000Z","size":963,"stargazers_count":26,"open_issues_count":1,"forks_count":4,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-08-12T14:33:52.372Z","etag":null,"topics":["database","file-storage","flatfile","json","nosql","nosql-database","packagist","php","storage-engine","zero-dependency"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/r0mdau.png","metadata":{"files":{"readme":"README.fr.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-12T20:53:03.000Z","updated_at":"2024-12-09T02:54:47.000Z","dependencies_parsed_at":"2024-12-09T02:22:43.322Z","dependency_job_id":"d21f38e3-1673-475f-8886-9f577954eae0","html_url":"https://github.com/r0mdau/jisly","commit_stats":{"total_commits":54,"total_committers":4,"mean_commits":13.5,"dds":"0.16666666666666663","last_synced_commit":"8e9204eb495190481b99112acd70cbe3ee1abbb4"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/r0mdau/jisly","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r0mdau%2Fjisly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r0mdau%2Fjisly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r0mdau%2Fjisly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r0mdau%2Fjisly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/r0mdau","download_url":"https://codeload.github.com/r0mdau/jisly/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r0mdau%2Fjisly/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28309677,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T14:58:17.114Z","status":"ssl_error","status_checked_at":"2026-01-11T14:55:53.580Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","file-storage","flatfile","json","nosql","nosql-database","packagist","php","storage-engine","zero-dependency"],"created_at":"2026-01-11T15:03:27.626Z","updated_at":"2026-01-11T15:03:28.277Z","avatar_url":"https://github.com/r0mdau.png","language":"PHP","readme":"Jisly\n========\n\n![PHPUnit](https://github.com/r0mdau/jisly/actions/workflows/unit-tests.yml/badge.svg)\n[![Coverage Status](https://coveralls.io/repos/github/r0mdau/jisly/badge.svg?branch=main)](https://coveralls.io/github/r0mdau/jisly?branch=main)\n[![Known Vulnerabilities](https://snyk.io/test/github/r0mdau/jisly/badge.svg?targetFile=composer.lock)](https://snyk.io/test/github/r0mdau/jisly?targetFile=composer.lock)\n\nBibliothèque de base de données PHP légère NoSQL, fichier plat JSON.\n\nL'objectif principal de Jisly est de vous permettre de démarrer rapidement votre projet avec la possibilité de stockage\n en mémoire et fichier plat à l'aide d'une syntaxe de requête NoSQL (orientée document).\n\n**Les accès concurrents sont gérés !**\n\n# Comment installer et charger\n\nCette librairie est disponible sur [Packagist](https://packagist.org/packages/r0mdau/jisly)\n\n```\ncomposer require r0mdau/jisly:^2.0\n```\n\n## Charger la librairie\n\nJisly repose sur la [spécification PSR-4](https://www.php-fig.org/psr/psr-4/) de chargement automatique des classes.\n\n```\nuse Jisly\\JislyCollection;\n\npublic function saveCart(): void {\n    $jisly = new JislyCollection(\"/tmp/data\", \"cart\");\n    ...\n}\n```\n\n# Définitions\n\n1. Chaque document possède un identifiant unique dénommé `_rid`.\n2. Chaque collection est représentée physiquement par un fichier.\n3. Les fichiers sont stockés dans un seul répertoire de travail. La classs Jisly est instanciée avec le chemin vers ce \nrépertoire en paramètre.\n4. Chaque fois que vous faites un CRUD, toutes les données sont stockées en mémoire.\n5. Et les données sont sauvegardées sur le système de fichiers.\n\n# Exemples d'utilisation\n\n## Initialisation de la classe :\n\n`$directory` contient le chemin vers le répertoire où seront stockés les fichiers (=collections) du modèle de données.\n\n```php\n$database = new Jisly($directory);\n```\n\n## Pour accéder à une collection :\n\n`$nom` contient le nom de la collection que l'on souhaite requêter. Exemple : `user`\n\nRetourne un objet **JislyCollection** :\n```php\n$database-\u003ecollection($nom);\n```\n\nAttention : chaque premier accès à une collection lance le stockage des données en mémoire.\n\n## Pour requêter une collection :\n\n**PREAMBULE :**\nLes méthodes Insert, Update, Delete retournent un booleen, `true` si l'action s'est bien passée, `false` dans le cas contraire\n\n### Méthode d'insertion :\n\nInsère le tableau dans la collection spécifiée au format json et attribue un identifiant `_rid` unique au document \nsi celui-ci n'a pas été spécifié :\n```php\n$successBool = $database-\u003ecollection($file)-\u003einsert(\n  [\n    \"nom\" =\u003e \"dauby\", \n    \"prenom\" =\u003e \"romain\"\n  ]\n);\n```\n\n### Méthode de suppression :\n\n*Il faut au préalable rechercher tous les documents à effacer pour fournir l'attribut `_rid` à la méthode delete*\n\nSupprime le seul document de la collection qui a pour valeur `$rid` à l'attribut `_rid` :\n```php\n$successBool = $database-\u003ecollection($file)-\u003edelete($rid);\n```\n\n### Méthode de sélection :\n\nRetourne tous les documents de la collection dans un **array()** d'objets :\n```php\n$results = $database-\u003ecollection($file)-\u003efind();\n```\n\nRetourne tous les documents de la collection qui ont un attribut `nom` avec `dauby` comme valeur dans un **array()** \nd'objets :\n```php\n$results = $database-\u003ecollection($file)-\u003efind(\n  [\n    \"nom\" =\u003e \"dauby\"\n  ]\n);\n```\n\nRetourne le premier document qui a un attribut `nom` avec `19` comme valeur sous forme d'objet :\n```php\n$result = $database-\u003ecollection($file)-\u003efindOne(\n  [\n    \"nom\" =\u003e 19\n  ]\n);\n```\n\n#### Opérateurs logiques OR et AND\n\nCes deux opérateurs logiques peuvent être utilisés avec les méthodes `find` et `findOne`.\n\nSi vous ne spécifiez pas d'opérateur logique, le **OR** sera utilisé.\n\nRetourne tous les documents de la collection qui on un attribut `nom` avec `Lucas` **OU** un attribut `prenom` \navec `Georges` dans un **array()** d'objets :\n```php\n$result = $database-\u003ecollection($file)-\u003efind(\n  [\n    \"prenom\" =\u003e \"Georges\", \n    \"nom\" =\u003e \"Lucas\"\n  ], JislyCollection::LOGICAL_OR\n);\n```\n\nRetourne le premier document qui a un attribut `nom` avec `Lucas` **ET** un attribut `prenom`\navec `Georges` sous forme d'objet :\n```php\n$result = $database-\u003ecollection($file)-\u003efindOne(\n  [\n    \"prenom\" =\u003e \"Georges\", \n    \"nom\" =\u003e \"Lucas\"\n  ], JislyCollection::LOGICAL_AND\n);\n```\n\n### Méthode de modification :\n\nPour la modification, les documents concernés sont entièrement remplacés par le second **array()** passé en paramètre.\n\n*Il faut au préalable rechercher tous les documents à remplacer pour fournir l'attribut `_rid` à la méthode update*\n\nModifie le seul document de la collection qui a pour valeur $rid à l'attribut `_rid` :\n```php\n$successBool = $database-\u003ecollection($file)-\u003eupdate(\n  $rid,\n  [\n    \"prenom\" =\u003e \"georges\", \n    \"nom\" =\u003e \"lucas\"\n  ]\n);\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fr0mdau%2Fjisly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fr0mdau%2Fjisly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fr0mdau%2Fjisly/lists"}