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.
This project is no longer maintained and the repository is archived. Thanks for all the fish.
- CRUD operations made simple
- batch update and delete
- filtering
- ordering
- limiting
- transactions
- custom queries
- events
The documentation is hosted by ReadTheDocs.org.
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', '=', '[email protected]')
->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 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:
- Django ORM
- Laravel's Eloquent ORM
- Paris
Let me know what you think!
Ivan Habunek @ihabunek
If you like it, buy me a beer (in Croatia, that's around โฌ2 or $3).
Licensed under the MIT license. See LICENSE.md
.