GithubHelp home page GithubHelp logo

ikhbalfuady / ldbx Goto Github PK

View Code? Open in Web Editor NEW
12.0 2.0 1.0 97 KB

Localstorage database with Laravel Eloquent syntax

HTML 70.27% JavaScript 25.85% CSS 3.87%
array eloquent-javascript eloquent-models html-css-javascript html5 javascript javascript-applications javascript-library laravel localstorage

ldbx's Introduction

logo

LDBX

Javascript Library for data management using localStorage with laravel eloquent syntax, Create, Read, Update, Delete and Truncate has avail in this lib.

Demo : LDXB Demo

Usage

Initialize Table

There are 3 params in constructor :

using params default

  1. Table Name [String] (Required)
  2. Query Log in console [Boolean] (Optional)
  3. Soft Delete [Boolean] (Optional)

using config params you can using object configuration params with structure like this :

{
  table: String,
  showLog: Boolean,
  softDelete: Boolean,
}

Example instance


// Using default params
const DataModel = new LDBX('users', true, false) 


// Using Config params
const config = {
  table: 'users',
  log: true,
  softDelete: false,
}
const DataModel = new LDBX(config)


Get All Data

const UserModel = new LDBX('users')
var list = UserModel.get()


Get first / single data

const UserModel = new LDBX('users')
var data = UserModel.where('id', id).first() // *first its mean, first of result query


Single selection where

const UserModel = new LDBX('users')
var data = UserModel.where('name', 'ikhbalfuady').get()


Multiple selection where

// using custom operator
const UserModel = new LDBX('users')
var data = UserModel.where('age', '>=' 18)
           .where('age', '<=', 25)
           .get()


Find by id

const UserModel = new LDBX('users')
var data = UserModel.find(id)


Store Data

const UserModel = new LDBX('users')
let data = {
  name: "John",
  age: 21
}

UserModel.save(data)


Update Data

const UserModel = new LDBX('users')
let data = UserModel.find(id)
if (!data) throw error(`user with id"${id}" not found `)

// set value into object
data.name = "Ikhbalfuady"
UserModel.update(data)


Delete Data

const UserModel = new LDBX('users')
UserModel.delete(id) // default soft delete

// permanent delete
const UserModel = new LDBX('users')
UserModel.delete(id, true)

Avail "Where" Operator

Name value Syntax Status
Equal = .where('key', '=', value) OR .where('key', value) READY
Like / Contains like .where('key', 'like', value) READY
Less Than < .where('key', '<', value) READY
Less Than Equal <= .where('key', '<=', value) READY
Greater Than > .where('key', '>', value) READY
Greater Than Equal >= .where('key', '>=', value) READY
Is NULL N/n .where('key', 'N', value) OR .where('key', 'n', value) READY
Is NOT NULL NN / nn .where('key', 'NN', value) OR .where('key', 'nn', value) READY
IN IN .where('key', 'IN', arrayValue) // arrayValue = [1,2,3] READY
NOT IN NIN .where('key', 'NIN', arrayValue) // arrayValue = [1,2,3] READY

Other Features

trashed()

this is method chaining to getting only trashed data

var UserModel = new LDBX('users')
.trashed()
.get()


withTrashed()

this is method chaining to getting all with trashed data if you using softDelete

var UserModel = new LDBX('users')
.withTrashed()
.get()


truncate()

this is method chaining to clean up data

var UserModel = new LDBX('users')
.truncate()


hasData()

this is method chaining to checking table has already have data or not

var UserModel = new LDBX('users')
.hasData()


getFillableColumn()

this is method chaining to getting fillable columns of object you set

// getting fillable of existing data
var UserModel = new LDBX('users')
var user = UserModel.find(1)
var fillableColumns = UserModel.getFillableColumn(user)

fixStructure()

this is method chaining to fixing structure like ALTER TABLE in SQL
when you chaning structure of object model you have, you just call this method for fix that example :

// current model
let UsersSpec = {
  dbConfig: {
    table: 'users',
    showLog: true,
    softDelete: true,
  },
  dataModel: {
    id: null,
    name: null,
    email: null
  }
}
const UserModel = new LDBX(UsersSpec.dbConfig)
const fillableColumns = UserModel.getFillableColumn(UsersSpec.dataModel)
/* return 
['id', 'name', 'email']
*/

// and you want to change the users to model to like this
let UsersSpec = {
  dbConfig: {
    table: 'users',
    showLog: true,
    softDelete: true,
  },
  dataModel: {
    id: null,
    name: null,
    email: null,
    phone: null, // new
    born_date: null, // new
  }
}

// just do like this
const UserModel = new LDBX(UsersSpec.dbConfig)
const newFillableColumns = UserModel.getFillableColumn(UsersSpec.dataModel)
UserModel.fixStructure(newFillableColumns) // all of data will be updated with new fillable structure

orderBy(key, type?, dateFormat?)

this is method chaining to implementing "order data" of result query \

  • key : String // object key
  • type : Enum(asc,desc) (default : asc)
  • dateFormat : Boolean (default : false) // for sorting date type data
const UserModel = new LDBX('jorunal')
.orderBy('key') // order ASC
.get()

const UserModel = new LDBX('jorunal')
.orderBy('key', 'desc') // order DESC
.get()

// ordering date data
const UserModel = new LDBX('transaction')
.orderBy('date', 'desc', true) // fot better result activate date format with set 3 in third parameter
.get()


  • Atenttion : order can only be executed once per query, even if you add multiple 'orderBy', the last 'orderBy' is recognized

belongsTo(tableName, foreignKey, newObjectName?, targetKey?)

this is method chaining to implementing relation of some data
this method will be created new single object for every object result data \

  • tableName : name of table
  • foreignKey : foreign key object, ex : role_id
  • newObjectName : object name for the relation , ex : role
  • targetKey : target key object of source data, default is "id"
const UserModel = new LDBX('users')
.belongsTo('roles', 'role_id', 'role') // simply version
.first()

/* return 
{
  id: 1
  name: 'John',
  role_id: 1,
  roles: {
    id: 1,
    name: 'Admin',
  },
}
*/

const UserModel = new LDBX('jorunal')
.belongsTo('coa', 'coa_revenue_code', 'coa_revenue', 'code') // full version
.get()

/* return 
[
  {
    id: 1
    name: 'TRX Forex',
    coa_revenue_code: '101020230'
    coa_revenue: {
      code: '101020230',
      name: 'Fix Revenue',
    }
  },
  {
    id: 2
    name: 'TRX others',
    coa_revenue_code: '4305353353'
    coa_revenue: {
      code: '4305353353',
      name: 'Other Revenue',
    }
  }
]
*/


hasMany(tableName, foreignKey, newObjectName?, targetKey?)

this is method chaining to implementing relation of some data
this method will be created new single object with array result for every object in result data\

  • tableName : name of table
  • foreignKey : foreign key object, ex : role_id
  • newObjectName : object name for the relation , ex : role
  • targetKey : target key object of source data, default is "id"
const UserModel = new LDBX('users')
.hasMany('roles', 'role_id', 'roles') // simply version
.first()
/* return 
{
  id: 1
  name: 'John',
  roles: [
    {
      id: 1,
      name: 'Admin',
    },
    {
      id: 2,
      name: 'Staff',
    }
  ],
}
*/

const UserModel = new LDBX('jorunal')
.hasMany('coa', 'coa_revenue_code', 'coa_revenues', 'code') // full version
.get()

/* return 
[
  {
    id: 1
    name: 'transaction',
    coa_revenues: [
      {
        code: '101020230',
        name: 'Fix Reveneu',
      },
      {
         code: '105020230',
        name: 'Other Revenue
    ],
  }
]
*/

ldbx's People

Contributors

ikhbalfuady avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.