<p align="center"><img src="https://repository-images.githubusercontent.com/232873829/e2c45600-33b0-11ea-941f-ba319f2d3c52" width="500"/></p>
<p align="center">
<a href="https://github.styleci.io/repos/232873829"><img src="https://github.styleci.io/repos/232873829/shield?branch=master" /></a>
<a href="https://packagist.org/packages/samirzz/jldb"><img src="https://img.shields.io/packagist/php-v/samirzz/jldb?label=php&style=flat-square"/></a>
<a href="https://packagist.org/packages/samirzz/jldb"><img src="https://img.shields.io/github/contributors/mohamed-samir907/jldb?style=flat-square"/></a>
<a href="https://packagist.org/packages/samirzz/jldb"><img src="https://img.shields.io/badge/License-MIT-blue?style=flat-square"/></a>
</p>
PHP JLDB (JSON Lite DB)
Simple and powerfull tool that allows to use json file like a database. It provides collection of methods that you can use like a database query builder.
Installation
composer require samirzz/jldb
Usage
- 
Create a config.php file like that
<?php
return [
    /
     * The default json file storage path that the user store the data on it.
     */
    'db_path' => __DIR__ . '/../storage',
    /
     * Database name (json file name)
     */
    'db_name' => 'default.json'
];
- 
include config file in your project and create new object from the class like that
<?php
// index.php
require __DIR__ . '/vendor/autoload.php';
use Samirzz\JsonDB\JsonDB;
$config = include __DIR__ . '/config/jsondb.php';
$db = new JsonDB($config);
Now, you can use the method like that
// index.php
/
 * NOTE:
 * When you write the name of the table, if the table
 * not exists we will create it for you.
 * So don't worry about the creation of the table.
 */
/*
 | Create Record on the table
 |
 */
$data = [
    "name" => "Mohamed Samir",
    "email" => "[email protected]",
    "github" => "mohamed-samir907"
];
// This will create record on users table 
// If the data array doesn't has a primary key
// we will add primary key on create method to the data
// array. The default primary key is 'id' if you need
// to change it, pass the name of primary key as second paramenter
$users = $db->table('users')->create($data); // primaryKey = id
$users = $db->table('users')->create($data, '_key'); //primary key = _key
/*
 | Update an Existing Record on the table
 |
 */
$data = [
    "name" => "Orange",
    "quantity" => 4,
    "price" => 10,
    "totalPrice" => 40
];
$products = $db->table('products')->update(27, $data);
// if the primary key not equal to 'id' then you can pass the prmary key as the following
$products = $db->table('products')->update(27, $data, '_key');
/*
 | Delete an Existing Record on the table
 |
 */
$db->table('users')->delete(12);
// OR: in case of primary key changed
$db->table('users')->delete(12, '_key');
/*
 |      Fetch the data
 |
 */
// Get all tables data
$database = $db->all();
// Get table data
$products = $db->table('products')->find(27);
$products = $db->table('products')->find(27, '_key');
// Get table data
$products = $db->table('products')->get();
// Get with where
$products = $db->table('products')
    ->where('name', '=', 'Orange')
    ->get();
$products = $db->table('products')
    ->where('name', '=', 'Orange')
    ->where('totalPrice', '>=', '10')
    ->get();
// Get the records Paginated
$products = $db->table('products')->paginate(20);
// Get last record on the table
$product = $db->table('products')->last();
// Get first record on the table
$product = $db->table('products')->first();
// Get count records on the table
$countProducts = $db->table('products')->count();
// Get count of column=value in the table
$countOrange = $db->table('products')->countOf("name", "Orange");
// If you love object style you can convert the array to object like that
// use toObject() helper function
$users = toObject($db->table('users')->get());
foreach ($users as $user) {
    echo $user->name;
}
TODO
- 
add join, like, take, skip, groupBy, orderBy
- 
support functions like sum, avg, ... and allow the user to create his own function.
- 
select(...$columns)
- 
create prepare trait to check pendings and return the result of them.
- 
change the structure
- create folder for each database
- create json file for each table
- 
add encryption to the database
- 
add username, password for connect to the database.
- 
add Model for each table
- 
add schema class and save the tables schema in json file related to the database it self.
- 
add validation class for validate the type of the column.
- 
add relationships between tables.
- Add support to redis