Zend DB (standard way or table gateway) vs Doctrine in Zend 2. Some might say it’s apple vs orange comparison but I would say since they are substitutes (we use one between two) so it can be compared (as requirements are not always crystal clear).
When I started Zend 2 since documentation, books, tutorials were based on Zend DB or Table Gateway, I used it but I was not happy with ways when we have to work on 2, 3 or more tables joins (multiple table gateway adapters) so I switched to Doctrine ORM (also reading so many saying “doctrine is good for large project”). I was already using doctrine in symfony projects so was not difficult but I also didn’t like doctrine in instance like complex joins between entities (extra works), especially slowness and extra memory compared to Zend DB.
Now I am really confused what should I do? So what do you guys suggest?
From my analysis:
Table Gateway
Pros
- Lightweight (keep things simple)
- Native to Zend (better support now and for future updates)
- More documentation-books
- Better community or user support (as it is what many are working on)
- Close of database-tables (I am good in SQL. So feel good)
- More flexible
- Easier to use other doctrine native features such as ACL
Cons:
- Table joins (more complex)
- Primitive in some context
- Handling multiple table gateway instance is difficult.
Doctrine
Pros
- More classes-loosely coupled—better control
- Brings all advantages of using ORM
- Lots of work already on doctrine itself (tutorials-documentations) which works most of the time
- Less reliance on database
- Caching (but also possible with Zend DB Table Gateway)
Cons:
- More memory and slower (compared to Zend DB Table Gateway) for medium project
- Adds complexity (extra files+ configurations + its own conventions)
- Sometimes overkill for medium projects
- More work in many to many relationships between entities or complicated joins
- Extra work YAML-Schema
- Less tutorials-books-user support on Zend + Doctrine
Any others? ( for both)
So, in light of these, which one do you suggest? Working on generic CMS that I can extend.
or why Zend DB cannot/should not be used in larger projects?
I found some discussion here but not as per its pros/cons analysis.