Phormium is a minimal ORM for PHP (which incidentally works with Informix)
PHP PLpgSQL Other
Permalink
Failed to load latest commit information.
docs
example Change docs and changelog to reflect recent changes Oct 20, 2015
src/Phormium Use ::class syntax where appropriate Dec 25, 2016
tests
.gitattributes Added .gitattributes to handle line breaks. Oct 13, 2012
.gitignore
.travis.yml
CHANGELOG.md Move Aggregate to Phormium\Query namespace Dec 23, 2016
INSTALL.md
LICENSE.md Minor code style fixes Jan 9, 2015
Makefile Add a Makefile for common tasks Dec 25, 2016
README.md Tweak README Dec 5, 2016
TODO.md
apigen.neon Fixed apigen config. Jun 14, 2013
composer.json Remove deprecated suggest from composer.json Dec 24, 2016
phpunit.xml.dist

README.md

Phormium

Phormium is a minimalist ORM for PHP.

Tested on Informix, MySQL, PosgreSQL and SQLite. Might work on other databases with a PDO driver or may require some work.

Warning: This is a work in progress. Test before using! Report any bugs here.

Latest Stable Version Total Downloads Build Status Coverage Status

Features

  • CRUD operations made simple
  • batch update and delete
  • filtering
  • ordering
  • limiting
  • transactions
  • custom queries
  • events

Documentation

The documentation is hosted by ReadTheDocs.org.

Showcase

After initial setup, Phormium is very easy to use. Here's a quick overview of it's features:

// Create a new person record
$person = new Person();
$person->name = "Frank Zappa";
$person->birthday = "1940-12-21";
$person->save();

// Get record by primary key
Person::get(10);   // Throws exception if the model doesn't exist
Person::find(10);  // Returns null if the model doesn't exist

// Check record exists by primary key
Person::exists(10);

// Also works for composite primary keys
Post::get('2013-01-01', 100);
Post::find('2013-01-01', 100);
Post::exists('2013-01-01', 100);

// Primary keys can also be given as arrays
Post::get(['2013-01-01', 100]);
Post::find(['2013-01-01', 100]);
Post::exists(['2013-01-01', 100]);

// Fetch, update, save
$person = Person::get(10);
$person->salary += 5000; // give the man a raise!
$person->save();

// Fetch, delete
Person::get(37)->delete();

// Intuitive filtering, ordering and limiting
$persons = Person::objects()
    ->filter('salary', '>', 10000)
    ->filter('birthday', 'between', ['2000-01-01', '2001-01-01'])
    ->orderBy('name', 'desc')
    ->limit(100)
    ->fetch();

// Count records
$count = Person::objects()
    ->filter('salary', '>', 10000)
    ->count();

// Check if any records matching criteria exist
$count = Person::objects()
    ->filter('salary', '>', 10000)
    ->exists();

// Distinct values
$count = Person::objects()
    ->distinct('name', 'email');

// Complex composite filters
$persons = Person::objects()->filter(
    Filter::_or(
        Filter::_and(
            array('id', '>=', 10),
            array('id', '<=', 20)
        ),
        Filter::_and(
            array('id', '>=', 50),
            array('id', '<=', 60)
        ),
        array('id', '>=', 100),
    )
)->fetch();

// Fetch a single record (otherwise throws an exeption)
$person = Person::objects()
    ->filter('email', '=', 'ivan@example.com')
    ->single();

// Batch update
Person::objects()
    ->filter('salary', '>', 10000)
    ->update(['salary' => 5000]);

// Batch delete
Person::objects()
    ->filter('salary', '>', 10000)
    ->delete();

// Aggregates
Person::objects()->filter('name', 'like', 'Ivan%')->avg('salary');
Person::objects()->filter('name', 'like', 'Marko%')->min('birthday');

// Custom filters with argument binding
Person::objects()
    ->filter("my_func(salary) > ?", [100])
    ->fetch();

See documentation for full reference, also check out the example directory for more examples.

Why?

"Why another ORM?!?", I hear you cry.

There are two reasons:

  • I work a lot on Informix on my day job and no other ORM I found supports it.
  • Writing an ORM is a great experience. You should try it.

Phormium is greatly inspired by other ORMs, in particular:

Let me know what you think!

Ivan Habunek @ihabunek

Praise

If you like it, buy me a beer (in Croatia, that's around €2 or $3).

Flattr this

License

Licensed under the MIT license. See LICENSE.md.