DumbledORM a novelty PHP ORM in < 200 lines
blog.jasonmooberry.com
blog.jasonmooberry.com
There's definitely a need for a 'great' PHP ORM. I've been rolling my own for a couple of years since I've never been satisfied with what's out there. Here's the kind of syntax/style I use on mine (that class definition is the entire code I need to write to get working abstraction).
class Person extends Model {
const TABLE_NAME = 'people';
const TABLE_KEY = 'id';
}
$person = Model::find("Person", 1234);
$person->name = "James";
$person->save();
$persons_named_james = Model::find("Person", array("name" => "James"));
foreach($persons_named_james as $person) {
print $person->age;
}
$person = new Person();
$person->age = 26;
$person->save();
I should really upgrade to 5.3 so I could write Person::find(1234); instead.
hello
world
http://news.ycombinator.com/formatdoc (this used to be in a help link next to the reply box, but seems to be gone now).http://www.php.net/manual/en/function.get-called-class.php#9...
syntas like $peopleNamedJames = Doctrine::getTAble("Person")->findByName("James"); foreach( $peopleNamedJames as $person ){ echo $person->getAge(); }
It's very Hibernate'esqe in some regards also.
There are pieces to dislike (arguably DQL, soft deletes are almost impossible, etc) but so far, it's a huge step forward from the likes of Zend_Db_Table or Doctrine 1.
http://www.doctrine-project.org/projects/orm/2.0/docs/refere...
I've been using Idiorm - http://github.com/j4mie/idiorm (used it on Weekis - http://weekis.com). It works really well for small-medium scale apps.
I can't be bothered with the bloat of some of the PHP Frameworks out there.
I like the look of DumbledORM, although it takes a bit of a different approach to Idiorm (and its "child" project, Paris - http://github.com/j4mie/paris - which is an Active Record implementation with support for associations built on top of Idiorm in ~130 lines of code). I'm not really a fan of code generation at the best of times, and for a tiny ORM it seems a bit out of place.
I do like the idea of being able to save multiple rows, jQuery-style. I might just steal that..
* do you write all your code without comments, or do you strip them out afterwards to get to save locs? imho you should forget the 200 loc constraint and make your code pretty instead - it looks anorectic. seesh, yes i know the 200 loc promise is your main selling point to make the project stand out ;)
* a namespace would be a good idea here. "Builder", "Db" and "ResultSet" aren't that uncommon.
* defining the connection credentials as a class with consts smells funny.
but mixing ORMs with custom SQL would be a challenge, because the results couldn't be mapped to relational tables anymore.
by the way, you can reuse dumbledORMs PDO-instance - $conn = Db::pdo() - and even the query method (preparing, executing and fetching) is public too.
i didn't look into the hydrate method, but it seems it is possible to map results from custom queries to ORM objects.
Wikipedia suggests several different meanings which seem to fit: Object-relational mapping, Object role modeling, Online Reputation Management, Online research methods, Outsourcing Relationship Management
Put as simply as I can put it, it's an abstraction layer in front of SQL.
The general logic (which I object to, though I still prefer ORM-based development) is that most of your class Objects relate to how you would store them in a database. Your 'User' object has a first name, a last name, a password, etc., which all map neatly to database records.
So, instead of doing "INSERT INTO users firstname, lastname, password) VALUES ('foo', 'bar', 'baz');", you create a user object:
User.firstname = 'foo'
User.lastname = 'bar'
User.password = 'baz'
User.save()
It's awesome how much cool stuff can be accomplished when not supporting PHP4. I'd like to see more libraries taking advantage of 5.3
Have you thought of using pearhub.org for distribution?