Skip to content
Phormium is a minimal ORM for PHP (which incidentally works with Informix)
Branch: develop
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs
example
src/Phormium
tests
.gitattributes
.gitignore
.travis.yml
CHANGELOG.md
INSTALL.md
LICENSE.md
Makefile
README.md
TODO.md
apigen.neon
composer.json
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.

You can’t perform that action at this time.