samirzz/jldb

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.

dev-master 2020-01-12 17:53 UTC

This package is auto-updated.

Last update: 2022-06-14 15:45:16 UTC


README

e2c45600-33b0-11ea-941f-ba319f2d3c52

68747470733a2f2f6769746875622e7374796c6563692e696f2f7265706f732f3233323837333832392f736869656c643f6272616e63683d6d6173746572 68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f73616d69727a7a2f6a6c64623f6c6162656c3d706870267374796c653d666c61742d737175617265 68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f6d6f68616d65642d73616d69723930372f6a6c64623f7374796c653d666c61742d737175617265 68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75653f7374796c653d666c61742d737175617265

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

  1. 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'
];
  1. 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" => "gm.mohamedsamir@gmail.com",
    "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