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.
Requires
- php: ^7.2
Requires (Dev)
- phpunit/phpunit: ^8.5
This package is auto-updated.
Last update: 2024-12-24 13:32:49 UTC
README
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" => "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