PHP Classes

Dialect PHP ORM and ODM Library: Store and retrieve objects in database using ORM

Recommend this page to a friend!
  Info   View files Documentation   View files View files (26)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Ratings Unique User Downloads Download Rankings
Not yet rated by the usersTotal: 50 This week: 1All time: 10,653 This week: 571Up
Version License PHP version Categories
dialectorm 2.0.1Artistic License5PHP 5, Databases, Design Patterns
Description 

Author

This class can store and retrieve objects in database using object-relational mapping and object-document-mapping (NoSQL).

It provides a base class that implements functions to access database tables that store records with the values of the variables and relationships of the objects that mapped to table records.

Applications just need to extend the base class to create implementation data objects by defining the variables and fields, table relationships and primary keys of the tables that will store those data objects.

The package also provides of the same classes in JavaScript and Python.

Picture of Nikos M.
Name: Nikos M. is available for providing paid consulting. Contact Nikos M. .
Classes: 17 packages by
Country: Greece Greece
Age: 47
All time rank: 8609 in Greece Greece
Week rank: 13 Up2 in Greece Greece Up
Innovation award
Innovation award
Nominee: 7x

Winner: 2x

Documentation

DialectORM

Tiny, fast, super-simple but versatile Object-Relational-Mapper (ORM) with Relationships and Object-NoSql-Mapper for PHP, Python, JavaScript

DialectORM

version 2.0.1

see also:

  • ModelView a simple, fast, powerful and flexible MVVM framework for JavaScript
  • tico a tiny, super-simple MVC framework for PHP
  • LoginManager a simple, barebones agnostic login manager for PHP, JavaScript, Python
  • SimpleCaptcha a simple, image-based, mathematical captcha with increasing levels of difficulty for PHP, JavaScript, Python
  • Dromeo a flexible, and powerful agnostic router for PHP, JavaScript, Python
  • PublishSubscribe a simple and flexible publish-subscribe pattern implementation for PHP, JavaScript, Python
  • Importer simple class & dependency manager and loader for PHP, JavaScript, Python
  • Contemplate a fast and versatile isomorphic template engine for PHP, JavaScript, Python
  • HtmlWidget html widgets, made as simple as possible, both client and server, both desktop and mobile, can be used as (template) plugins and/or standalone for PHP, JavaScript, Python (can be used as plugins for Contemplate)
  • Paginator simple and flexible pagination controls generator for PHP, JavaScript, Python
  • Formal a simple and versatile (Form) Data validation framework based on Rules for PHP, JavaScript, Python
  • Dialect a cross-vendor & cross-platform SQL Query Builder, based on GrammarTemplate, for PHP, JavaScript, Python
  • DialectORM an Object-Relational-Mapper (ORM) and Object-Document-Mapper (ODM), based on Dialect, for PHP, JavaScript, Python
  • Unicache a simple and flexible agnostic caching framework, supporting various platforms, for PHP, JavaScript, Python
  • Xpresion a simple and flexible eXpression parser engine (with custom functions and variables support), based on GrammarTemplate, for PHP, JavaScript, Python
  • Regex Analyzer/Composer Regular Expression Analyzer and Composer for PHP, JavaScript, Python

Dependencies:

  • Dialect
  • PHP: 5.3+
  • Python: 3+
  • JavaScript: ES7+

Supports:

  • Relational Datastores: MySql, MariaDB, Postgresql, Sql Server, Sqlite, easily extended to other Relational Stores via adding Dialect configuration
  • NoSql / Key-Value DataStores: Redis, Mongodb (example in progress), easily extended to other NoSql Stores via providing adapter

example (see /test folder)

define('DIR', dirname(__FILE__));
include(DIR.'/../../src/php/DialectORM.php');
include(DIR.'/PDODb.php');

DialectORM::dependencies([
    'Dialect' => DIR.'/Dialect.php',
]);
DialectORM::DBHandler(new PDODb([
    'dsn' => 'mysql:host=localhost;dbname=dialectorm',
    'user' => 'dialectorm',
    'password' => 'dialectorm'
], 'mysql'));

class Post extends DialectORM
{
    public static $table = 'posts';
    public static $pk = 'id'; // primary and/or foreign keys can also be composite keys, define with an array of keys eg ['k1', 'k2']
    public static $fields = ['id', 'content'];
    public static $relationships = [
        'meta' => ['hasOne', 'PostMeta', 'post_id'], // primary and/or foreign keys can also be composite keys, define with an array of keys eg ['k1', 'k2']
        'comments' => ['hasMany', 'Comment', 'post_id'], // primary and/or foreign keys can also be composite keys, define with an array of keys eg ['k1', 'k2']
        'authors' => ['belongsToMany', 'User', 'user_id', 'post_id', 'user_post'], // primary and/or foreign keys can also be composite keys, define with an array of keys eg ['k1', 'k2']
    ];

    public function typeId($x)
    {
        return (int)$x;
    }

    public function typeContent($x)
    {
        return (string)$x;
    }

    public function validateContent($x)
    {
        return 0 < strlen($x);
    }
}

class PostMeta extends DialectORM
{
    public static $table = 'postmeta';
    public static $pk = 'id'; // primary and/or foreign keys can also be composite keys, define with an array of keys eg ['k1', 'k2']
    public static $fields = ['id', 'status', 'type', 'post_id'];
    public static $relationships = [
        'post' => ['belongsTo', 'Post', 'post_id'] // primary and/or foreign keys can also be composite keys, define with an array of keys eg ['k1', 'k2']
    ];

    public function typeId($x)
    {
        return (int)$x;
    }

    public function typePostId($x)
    {
        return (int)$x;
    }

    public function typeStatus($x)
    {
        return strtolower((string)$x);
    }

    public function typeType($x)
    {
        return strtolower((string)$x);
    }

    public function validateStatus($x)
    {
        return in_array($x, ['approved', 'published', 'suspended']);
    }

    public function validateType($x)
    {
        return in_array($x, ['article', 'tutorial', 'general']);
    }
}

class Comment extends DialectORM
{
    public static $table = 'comments';
    public static $pk = 'id'; // primary and/or foreign keys can also be composite keys, define with an array of keys eg ['k1', 'k2']
    public static $fields = ['id', 'content', 'post_id'];
    public static $relationships = [
        'post' => ['belongsTo', 'Post', 'post_id'], // primary and/or foreign keys can also be composite keys, define with an array of keys eg ['k1', 'k2']
    ];

    public function typeId($x)
    {
        return (int)$x;
    }

    public function typeContent($x)
    {
        return (string)$x;
    }

    public function typePostId($x)
    {
        return (int)$x;
    }

    public function validateContent($x)
    {
        return 0 < strlen($x);
    }
}

class User extends DialectORM
{
    public static $table = 'users';
    public static $pk = 'id'; // primary and/or foreign keys can also be composite keys, define with an array of keys eg ['k1', 'k2']
    public static $fields = ['id', 'name'];
    public static $relationships = [
        'posts' => ['belongsToMany', 'Post', 'post_id', 'user_id', 'user_post'], // primary and/or foreign keys can also be composite keys, define with an array of keys eg ['k1', 'k2']
    ];

    public function typeId($x)
    {
        return (int)$x;
    }

    public function typeName($x)
    {
        return (string)$x;
    }

    public function validateName($x)
    {
        return 0 < strlen($x);
    }
}

$post = new Post(['content'=>'another post..']);
// alternative
//$post = new Post(); $post->setContent('another post..');

$post->setComments([new Comment(['content'=>'another comment..'])]);
$post->setComments([new Comment(['content'=>'still another comment..'])], ['merge'=>true]);

$post->setAuthors([new User(['name'=>'bar'])], ['merge'=>true]);

// alternative
//$user = new User(['name'=>'bar']);
//$user->save();
//$post->assocAuthors([$user]);

// to simply dissociate from a many-to-many relationship
//$post->dissocAuthors([$user]);

$post->save(['withRelated'=>['comments','authors']]);

//$post->delete(['withRelated'=>true]);

$count = Post::count(['conditions'=>[/../]]);
$posts = Post::fetchAll(['withRelated'=>['comments','authors']]); // eager load of relationships, no N+1 problem

//foreach(Post::fetchAll() as $post) $post->getComments(); // lazy load of relationships, N+1 problem

  Files folder image Files  
File Role Description
Files folder imagesrc (3 directories)
Files folder imagetest (1 file, 3 directories)
Accessible without login Image file dialectorm.jpg Icon Icon image
Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files  /  src  
File Role Description
Files folder imagejs (1 file)
Files folder imagephp (1 file)
Files folder imagepython (2 files)

  Files folder image Files  /  src  /  js  
File Role Description
  Accessible without login Plain text file DialectORM.js Data Auxiliary data

  Files folder image Files  /  src  /  php  
File Role Description
  Plain text file DialectORM.php Class Class source

  Files folder image Files  /  src  /  python  
File Role Description
  Accessible without login Plain text file DialectORM.py Data Auxiliary data
  Accessible without login Plain text file __init__.py Data Auxiliary data

  Files folder image Files  /  test  
File Role Description
Files folder imagejs (4 files, 2 directories)
Files folder imagephp (4 files, 2 directories)
Files folder imagepython (4 files, 2 directories)
  Accessible without login Plain text file dialectorm.sql Data Auxiliary data

  Files folder image Files  /  test  /  js  
File Role Description
Files folder imagenosql (1 file)
Files folder imagesql (1 file)
  Accessible without login Plain text file out-mysql.txt Doc. Documentation
  Accessible without login Plain text file out-redis.txt Doc. Documentation
  Accessible without login Plain text file test-mysql.js Data Auxiliary data
  Accessible without login Plain text file test-redis.js Data Auxiliary data

  Files folder image Files  /  test  /  js  /  nosql  
File Role Description
  Accessible without login Plain text file redis.js Data Auxiliary data

  Files folder image Files  /  test  /  js  /  sql  
File Role Description
  Accessible without login Plain text file mysql.js Data Auxiliary data

  Files folder image Files  /  test  /  php  
File Role Description
Files folder imagenosql (2 files)
Files folder imagesql (1 file)
  Accessible without login Plain text file out-mysql.txt Doc. Documentation
  Accessible without login Plain text file out-redis.txt Doc. Documentation
  Plain text file test-mysql.php Class Class source
  Plain text file test-redis.php Class Class source

  Files folder image Files  /  test  /  php  /  nosql  
File Role Description
  Plain text file redis.php Class Class source
  Plain text file redis_cli.php Class Class source

  Files folder image Files  /  test  /  php  /  sql  
File Role Description
  Plain text file pdo-mysql.php Class Class source

  Files folder image Files  /  test  /  python  
File Role Description
Files folder imagenosql (1 file)
Files folder imagesql (1 file)
  Accessible without login Plain text file out-mysql.txt Doc. Documentation
  Accessible without login Plain text file out-redis.txt Doc. Documentation
  Accessible without login Plain text file test-mysql.py Data Auxiliary data
  Accessible without login Plain text file test-redis.py Data Auxiliary data

  Files folder image Files  /  test  /  python  /  nosql  
File Role Description
  Accessible without login Plain text file redis.py Data Auxiliary data

  Files folder image Files  /  test  /  python  /  sql  
File Role Description
  Accessible without login Plain text file mysql.py Data Auxiliary data

 Version Control Unique User Downloads Download Rankings  
 100%
Total:50
This week:1
All time:10,653
This week:571Up