I am just starting to use Doctrine again after a long break.  I used 
Doctrine before lightly, more so following simple examples in a tutorial.

Now, I am evaluating using it in a real project that uses multiple 
databases and joins that span across several databases and tables.  So far 
I am using it for new functionality only.

Functionality is as follows -- given a list of many services, each service 
falls into one of the few categories.  To select required service faster, 
users are to select their category first, upon which they are shown 
services from that category only and then they can select appropriate 
service.  I've decided to create two entities in this case, ServiceLineItem 
(description), and ServiceCategory.  And set up ManyToOne relationship like 
so:

class ServiceLineItem
{
    /**
     * @ManyToOne(targetEntity="ServiceCategory")
     */
    private $category;
}

*Task*
Select all services in ServiceLineItem, with chosen ServiceCategory of 
"Testing".

Using SQL I would do it like so:
-- Exhibit 1 -- 
select * 
from service_line_item 
join service_category on service_line_item.service_category_id = 
service_category.id
where service_category.category = "Testing";

Or I could do it like so, without the JOIN if I have to:
$id = ... select id from service_category where category = "Testing";
--
select * from service_line_item where service_category_id = $id;

*My problem is as so:*

   - My expectations of Doctrine were that there would be a simple 
   auto-magical way to retrieve data for a common JOIN pattern like in Exhibit 
   1.  
   The relationship association is already defined!  Might there be an 
   extra method to invoke that connection implicitly?
   
   So far, people tell me that I have to write a custom DQL with custom 
   class extending EntityRepository and using createQueryBuilder(), where(), 
   setParameter() and innerJoin().
   It may be fine and great for extra custom cases, but it is a lot of 
   overhead to learn new API and use it in the code especially for something 
   fairly common and simple like my use case (I would think).
   I ponder the efforts of learning DQL API when I already know how to call 
   an already-complex enough and already-known-to-me SQL directly, with 
   mysqli.  I see this (DQL, etc) as being potentially more trouble than it's 
   worth.
   
The above has me question how far I want to go into Doctrine if it is going 
to place a lot of custom DQL API into the codebase both for me and for 
others to learn.

Alternatively, it seems it'd be easier to do something like this instead, 
effectively breaking removing the JOIN, avoiding custom DQL, but leaving no 
power for Doctrine.... 
Entity\ServiceLineITem

Am I using this correctly?   Is there a philosophy behind Doctrine that I 
am missing?  Did I perhaps miss a feature?

My trial move towards using Doctrine was in hopes that it will manage SQL 
creation&modification for me (it mostly does), use InnoDB (it does), set up 
FK+Referential Integrity (it does), and simplify data Input/Output (so far 
... it does not, not to my "lazy programmer" satisfaction)

Thanks!

-- 
You received this message because you are subscribed to the Google Groups 
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to doctrine-user+unsubscr...@googlegroups.com.
To post to this group, send email to doctrine-user@googlegroups.com.
Visit this group at http://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to