Eleven days ago, the core team from the Propel Project was discussing about its future. Some thought that this meeting was just to give a final “rest in peace” to Propel, however they could not be more wrong. Propel is more alive than ever!.
Many years ago, in the beginnings of 2008, I met a framework, it was our beloved symfony framework, and with it, I met a great ORM (you can guess), it was Propel. This ORM offered a lot of amazing things I did not had seen before, like code generation and an API to do queries (Criteria) to the database without the need to do SQL.
I spent so much time with my new friends, but then a new ORM appeared in the field. Doctrine, not so well considered at first because of its beta state. Doctrine offered similar features than Propel like an Active Record implementation. However, for the queries to the database it used DQL (Doctrine Query Language), heavily based on HQL (Hybernate Query Language), instead of the Criteria way in Propel. By that time, I was working in a kind of intranets projects that need heavy queries with complex joins and DQL greatly helped me with them. This was hard to do with Propel (in my opinion). Doctrine makes heavy use of magic methods (overall __call), to achieve its functionality, this brings some overhead, however in that time performance was not an issue (for me). These two facts were decisive in my decision (well, the team’s decision 😉 ) to change to Doctrine. That was on late 2008.
That way I left Propel in the road and changed to Doctrine … it was hard. Maybe, sometime you thought about why not to unify these two projects, it was like a crazy idea before. However, that crazy idea, today is real. Propel2 will be an Active Record implementation on top of Doctrine2 DBAL (database abstraction layer) and Doctrine2 ORM. How this happened?, well, eleven days ago, the core team from Propel met on the IRC to talk about the future of Propel2. In this talk was also invite Jonathan H. Wage (@jwage) from the Doctrine Project. After discussing the reasons about why no to duplicate the same functionality that already have Doctrine2 and what benefits Propel2 will gain with the DBAL and ORM components; François Zaninotto (@francoisz) and the core team decide to based Propel2 on top of Doctrine2.
Propel2 will be an Active Record implementation, it will require PHP 5.3, it will be backwards-compatible (most of it) and François Zaninotto will lead this new Propel version. In this point if you does not known so much about Propel then I bet you already be asking … What will have Propel2 that already Doctrine2 does not have it?, the answer is simple, it will be faster, why?, because it will have code generation. However in this point I’m not pretty sure how much faster, anyway, it will have other features like the implementation of the Active Record pattern, (something that Doctrine2 does not implement) and the use of Query API instead of the Doctrine DQL.
The central idea about all of this that excites me so much is the fact to have the two main PHP ORMs working site by side to improve themselves. Pushing both into the same direction. I hope you to be so happy as I am, and start to contribute to these two amazing projects.
If you wanna read the whole IRC conversation check it here. You should, there is a funny part when some guy just enter and start asking technical questions and then asks if François is a bot … XD.