1

This question is about selecting data from multiple tables, joins, Doctrine2, ResultSetMapping, DQL and such stuff.

I have 4 tables:

  • user
  • contact
  • contact_phone
  • call

With relations as shown on the image: https://i.stack.imgur.com/762Jw.png

Every user can have many contacts, each contact can have many phones and each user can have many calls to/from his contacts. Just like in the real world... I've limited the number of fields in each table just for clarity.

So my problem is that I don't know how exactly to map call numbers to contact names when showing a list of calls for a specific user.

If I want to list all calls of user 1 I do:

    $callRepository = $this->getDoctrine()->getRepository('MyBundle:Call');
    $calls = $callRepository->findAll(array('user' => 1));

But this will give me just the list of all calls for this user and will not associate number (call.number) with names (contact.name).

I can achieve what I want with plain SQL with this query:

SELECT
    c.number,
    contact.name
FROM
     `call` c 
JOIN contact_phone cp ON 
    cp.number = c.number 
JOIN contact ON 
    contact.id = cp.contact_id 
WHERE
    c.user_id = contact.user_id
    AND c.user_id = 1

Please note that I don't want to select all calls (with SQL) and then map numbers to names with another query from the PHP layer because this way I won't be able to search the calls by name for example.

I was thinking that ResultSetMapping could help me in this case but I have no luck putting the SQL query and the ResultSetMapping together.

Please help, Thanks!

socket
  • 11
  • 1
  • 2

1 Answers1

0

As per my knowledge, you can acheive by using the below methods. Please go to bottom of the page. you can find Joins... try once..

http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/dql-doctrine-query-language.html

Kishore
  • 352
  • 1
  • 3
  • 19