Hi Marco,

Thank you for the quick response here. I ended up adding the association in 
the end because it was much more convenient, but I made sure to return an 
array result so as not to worry about the performance hit needed to 
actually hydrate the objects as well.

Do you know if there is currently any active work being done on this kind 
of thing? If there is, can you point me to a jira issue or pull request?

Thanks again,

Phil

On Sunday, May 15, 2016 at 9:43:39 PM UTC-7, Marco Pivetta wrote:
>
> Hi Phil,
>
> On 15 May 2016 at 23:16, Phil Stephenson <[email protected] 
> <javascript:>> wrote:
>
>> Thank you in advance for anyone who reads this and takes the time to 
>> respond!
>>
>> I have been reading a lot lately about Doctrine best practices, and I am 
>> interested in removing some lazy-loaded relationships on my models and 
>> using single, one-time queries in Repository classes.
>>
>> For example, my domain model has 2 entities: Event, and EventTicket
>>
>> EventTicket has a ManyToOne relationship to Event:
>>
>> class EventTicket {
>>     /**
>>      * @ORM\ManyToOne(targetEntity="Event")
>>      * @ORM\JoinColumn(name="event_id", referencedColumnName="id")
>>      */
>>     $event;
>>     ...
>> }
>>
>> I would like to write a query that gets all events and also all event 
>> tickets for those events, such that the result looks something like:
>>
>> array (size=5)
>>   0 => 
>>     array (size=6)
>>       'id' => int 1
>>       'name' => string 'Linux User Group Meetup' (length=23)
>>       'startsAt' => string '2016-10-08 20:00:00' (length=19)
>>       'endsAt' => string '2016-10-09 02:00:00' (length=19)
>>       'hashtag' => string 'freegeek' (length=8)
>>       'tickets' => array(
>>            array(
>>                   'id' => 1,
>>                   'name' => 'Ticket name',
>>                   ...
>>            ),
>>            array(
>>                   'id' => 2,
>>                   'name' => 'Ticket 2 name',
>>                   ...
>>            )
>>       )
>>   ...
>> )
>>
>> But, *I want to avoid adding an inverse side relationship 'tickets' onto 
>> the Event entity* to avoid lazy loading due to and in general just to 
>> follow the best practice suggestions on Doctrine's docs about trying to 
>> avoid bi-directional relationships, etc.
>>
>> So, my query looks like this (sorry for the formatting):
>>
>> class EventRepository extends EntityRepository
>> {
>>     public function findAll()
>>     {
>>         $qb = $this->getEntityManager()->createQueryBuilder();
>>         $qb->select('e', 't')
>>             ->from(Event::class, 'e')
>>             ->join(EventTicket::class, 't', Join::WITH, 't.event = e')
>>             ;
>>
>>         $query = $qb->getQuery();
>>         Debug::dump($query->getArrayResult());
>>
>> ...
>>
>> Which returns me a result that looks like this:
>>
>> array (size=5)
>>   0 => *// This is my Event object*
>>     array (size=6)
>>       'id' => int 1 
>>       'name' => string 'Linux User Group Meetup' (length=23)
>>       'startsAt' => string '2016-10-08 20:00:00' (length=19)
>>       'endsAt' => string '2016-10-09 02:00:00' (length=19)
>>       'hashtag' => string 'freegeek' (length=8)
>>       'address' => string '1731 SE 10th Ave, Portland, OR 97214, United 
>> States' (length=51)
>>   1 => *// This is the first EventTicket*
>>     array (size=9)
>>       'id' => int 1
>>       'name' => string 'Paid' (length=4)
>>       'description' => string '' (length=0)
>>       'quantity' => int 100
>>       'price' => string '10.00' (length=5)
>>       'startsAt' => null
>>       'endsAt' => null
>>       'minPerOrder' => int 1
>>       'maxPerOrder' => null
>>   2 => *// This is the second EventTicket*
>>     array (size=9)
>>       'id' => int 2
>>       'name' => string 'Free' (length=4)
>>       'description' => string '' (length=0)
>>       'quantity' => int 200
>>       'price' => string '0.00' (length=4)
>>       'startsAt' => null
>>       'endsAt' => null
>>       'minPerOrder' => int 1
>>       'maxPerOrder' => null
>>
>> This is as expected, since Doctrine's docs suggest this is what the 
>> result set will look like when querying for multiple entities: 
>> http://doctrine-orm.readthedocs.io/en/latest/reference/dql-doctrine-query-language.html#fetching-multiple-from-entities
>>
>> *Is there any way that I can nest these 2 EventTicket arrays underneath 
>> the root Event array with a 'tickets' key using DQL?* This would make it 
>> much easier for me when I go to serialize this array. If this is not 
>> possible, I will have to figure out a way to loop through these values and 
>> transform the arrays so for serialization...
>>
>> Again, thank you in advance.
>>
>> --
>>
>
> I think this is the second time this has popped up in the last 7 days. 
> This is an inconsistency that we have to solve in Doctrine2.
>
> As it stands, the quickest solution is to run two queries for this sort of 
> result, as fetch-joining is not supported for non-associations. If you want 
> to have hydrated results, then you will need an association here.
>
> Marco Pivetta 
>
> http://twitter.com/Ocramius      
>
> http://ocramius.github.com/ 
>
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to