Skip to content

The only PHP & MySQL ORM for Continuous Delivery. Using javanile/moldable can eliminate the step of data migrations and schema changes, often manual steps or exceptions to a continuous delivery workflow.

License

Notifications You must be signed in to change notification settings

javanile/moldable

Repository files navigation

javanile/moldable SensioLabsInsight

StyleCI Code Climate Build Status Test Coverage

Moldable is an abstraction layer to manage MySQL database with improved function to alter-state and manipulate database schema. Moldable integrates a ORM class for manage persistent objects and adapt database schema

Searcing for contributors 😎

We are looking for contributors (PHP lovers) that are passioned by ORM and Database worlds for:

We guarantee all visibility and thanks for our contributors, many many stars and public reference in all blog posts and articles that talk about javanile/moldable

Install via composer

We recommend installing via composer, to install otherwise you will write a issue.

composer require javanile/moldable 

Get Started

How to: Connect to database

<?php // library namespace  use Javanile\Moldable\Database; // initialize a database connection object  $db = new Database([ 'host' => 'localhost', 'dbname' => 'db_marketing', 'username' => 'root', 'password' => 'p4ssw0rd', 'prefix' => 'prefix_', ]); // '$db' is ready to use for your manipulation

How to: Create ORM class-model

<?php // library namespace  use Javanile\Moldable\Storable; // define ORM class-model class Customer extends Storable { public $id = self::PRIMARY_KEY; public $name = ''; } // instance empty object // database tables and fields are automatic generated  // or updated if change Customer class $customer = new Customer(); // assign values $customer->name = 'Franky Franco'; // now object persist on DB $customer->store();

How to: Create schema (update if exists)

<?php // '$db' is pre-connected database object (follow: 'How to: Connect to database') // apply method send queries to create  // or align database to defined schema  $db->apply([ // customer table name 'Customer' => [ // customer fields 'id' => $db::PRIMARY_KEY,// define field as a primary key 'name' => '',// empty string define field as VARCHAR 'points' => 0,// 0 (zero) define field as INT(11) 'born' => $db::DATE,// use to define as date field 'bio' => $db::TEXT,// text for large string and contents ], // products table name 'Products' => [ // products fields 'id' => $db::PRIMARY_KEY,// define field as a primary key 'name' => '',// empty string define field as VARCHAR 'price' => .0,// for float number init field with point-zero ".0" ], ]);

Setup for testing

To test the library, follow these steps:

  1. Run a local MySQL database
  2. Copy file phpunit.xml.dist to phpunit.xml
  3. Update phpunit.xml with database connection paramiters
  4. Run ./vendor/bin/phpunit from project directory

Talk about

Roadmap

  • Support to MongoDB for trasparent switch MySQL/MongoDB
  • Manage table to store key-value pair like Setting or Config or MetaField
  • Manage UUID field (large integer or hash string) alternative to PRIMARY_KEY index
  • Flexible join system to extend field of table model on runtime
  • Define encode/decode static method for a sub-set of field
  • Implementig Unit of work pattern
  • Listening For Query Events (gestione hook/event per modelli e query al db)

About

The only PHP & MySQL ORM for Continuous Delivery. Using javanile/moldable can eliminate the step of data migrations and schema changes, often manual steps or exceptions to a continuous delivery workflow.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 5

Languages