phormium / phormium
A minimalist ORM for PHP.
Installs: 18 683
Dependents: 1
Suggesters: 0
Security: 0
Stars: 57
Watchers: 7
Forks: 8
Open Issues: 0
Requires
- php: >=5.4.0
- ext-pdo: *
- symfony/config: ~2.6.0
- symfony/yaml: ~2.6.0
Requires (Dev)
- mockery/mockery: @stable
Suggests
- apache/log4php: Required for query logging
This package is not auto-updated.
Last update: 2022-06-06 03:08:10 UTC
README
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.
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:
- Django ORM
- Laravel's Eloquent ORM
- Paris
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).
License
Licensed under the MIT license. See LICENSE.md
.