https://github.com/r0mdau/jisly
The smallest PHP NoSQL database library, flat file JSON.
https://github.com/r0mdau/jisly
database file-storage flatfile json nosql nosql-database packagist php storage-engine zero-dependency
Last synced: about 1 month ago
JSON representation
The smallest PHP NoSQL database library, flat file JSON.
- Host: GitHub
- URL: https://github.com/r0mdau/jisly
- Owner: r0mdau
- License: apache-2.0
- Created: 2016-11-12T20:53:03.000Z (over 9 years ago)
- Default Branch: main
- Last Pushed: 2024-12-09T02:54:48.000Z (about 1 year ago)
- Last Synced: 2025-08-12T14:33:52.372Z (6 months ago)
- Topics: database, file-storage, flatfile, json, nosql, nosql-database, packagist, php, storage-engine, zero-dependency
- Language: PHP
- Homepage:
- Size: 940 KB
- Stars: 26
- Watchers: 5
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.fr.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
Jisly
========

[](https://coveralls.io/github/r0mdau/jisly?branch=main)
[](https://snyk.io/test/github/r0mdau/jisly?targetFile=composer.lock)
Bibliothèque de base de données PHP légère NoSQL, fichier plat JSON.
L'objectif principal de Jisly est de vous permettre de démarrer rapidement votre projet avec la possibilité de stockage
en mémoire et fichier plat à l'aide d'une syntaxe de requête NoSQL (orientée document).
**Les accès concurrents sont gérés !**
# Comment installer et charger
Cette librairie est disponible sur [Packagist](https://packagist.org/packages/r0mdau/jisly)
```
composer require r0mdau/jisly:^2.0
```
## Charger la librairie
Jisly repose sur la [spécification PSR-4](https://www.php-fig.org/psr/psr-4/) de chargement automatique des classes.
```
use Jisly\JislyCollection;
public function saveCart(): void {
$jisly = new JislyCollection("/tmp/data", "cart");
...
}
```
# Définitions
1. Chaque document possède un identifiant unique dénommé `_rid`.
2. Chaque collection est représentée physiquement par un fichier.
3. Les fichiers sont stockés dans un seul répertoire de travail. La classs Jisly est instanciée avec le chemin vers ce
répertoire en paramètre.
4. Chaque fois que vous faites un CRUD, toutes les données sont stockées en mémoire.
5. Et les données sont sauvegardées sur le système de fichiers.
# Exemples d'utilisation
## Initialisation de la classe :
`$directory` contient le chemin vers le répertoire où seront stockés les fichiers (=collections) du modèle de données.
```php
$database = new Jisly($directory);
```
## Pour accéder à une collection :
`$nom` contient le nom de la collection que l'on souhaite requêter. Exemple : `user`
Retourne un objet **JislyCollection** :
```php
$database->collection($nom);
```
Attention : chaque premier accès à une collection lance le stockage des données en mémoire.
## Pour requêter une collection :
**PREAMBULE :**
Les méthodes Insert, Update, Delete retournent un booleen, `true` si l'action s'est bien passée, `false` dans le cas contraire
### Méthode d'insertion :
Insère le tableau dans la collection spécifiée au format json et attribue un identifiant `_rid` unique au document
si celui-ci n'a pas été spécifié :
```php
$successBool = $database->collection($file)->insert(
[
"nom" => "dauby",
"prenom" => "romain"
]
);
```
### Méthode de suppression :
*Il faut au préalable rechercher tous les documents à effacer pour fournir l'attribut `_rid` à la méthode delete*
Supprime le seul document de la collection qui a pour valeur `$rid` à l'attribut `_rid` :
```php
$successBool = $database->collection($file)->delete($rid);
```
### Méthode de sélection :
Retourne tous les documents de la collection dans un **array()** d'objets :
```php
$results = $database->collection($file)->find();
```
Retourne tous les documents de la collection qui ont un attribut `nom` avec `dauby` comme valeur dans un **array()**
d'objets :
```php
$results = $database->collection($file)->find(
[
"nom" => "dauby"
]
);
```
Retourne le premier document qui a un attribut `nom` avec `19` comme valeur sous forme d'objet :
```php
$result = $database->collection($file)->findOne(
[
"nom" => 19
]
);
```
#### Opérateurs logiques OR et AND
Ces deux opérateurs logiques peuvent être utilisés avec les méthodes `find` et `findOne`.
Si vous ne spécifiez pas d'opérateur logique, le **OR** sera utilisé.
Retourne tous les documents de la collection qui on un attribut `nom` avec `Lucas` **OU** un attribut `prenom`
avec `Georges` dans un **array()** d'objets :
```php
$result = $database->collection($file)->find(
[
"prenom" => "Georges",
"nom" => "Lucas"
], JislyCollection::LOGICAL_OR
);
```
Retourne le premier document qui a un attribut `nom` avec `Lucas` **ET** un attribut `prenom`
avec `Georges` sous forme d'objet :
```php
$result = $database->collection($file)->findOne(
[
"prenom" => "Georges",
"nom" => "Lucas"
], JislyCollection::LOGICAL_AND
);
```
### Méthode de modification :
Pour la modification, les documents concernés sont entièrement remplacés par le second **array()** passé en paramètre.
*Il faut au préalable rechercher tous les documents à remplacer pour fournir l'attribut `_rid` à la méthode update*
Modifie le seul document de la collection qui a pour valeur $rid à l'attribut `_rid` :
```php
$successBool = $database->collection($file)->update(
$rid,
[
"prenom" => "georges",
"nom" => "lucas"
]
);
```