[DDC-2250] Joining Associations in Single Inheritance Scheme Created: 20/Jan/13  Updated: 20/Jan/13  Resolved: 20/Jan/13

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Johannes Schmitt Assignee: Benjamin Eberlei
Resolution: Can't Fix Votes: 0
Labels: None


 Description   

Let's assume the following class hierarchy:

AbstractComment
SpecialComment extends AbstractComment
{
    private $specialAssociation;
}
RegularComment extends RegularComment

Now, I'd like to write a query such as:

SELECT c, a FROM AbstractComment c LEFT JOIN c.specialAssociation a

The idea is to preload the association when selecting all comments. Now, that association is only present on a sub-class of the queried class, but since it is a single table inheritance, Doctrine should be able to join it for those entities where it is present.

At the moment unfortunately, Doctrine shows an error that the association does not exist on the AbstractComment class. Also, there is no real alternative to this except moving the collection to the base class even if it does not belong there.



 Comments   
Comment by Benjamin Eberlei [ 20/Jan/13 ]

DQL has strict typing with regard to inheritance, this type of query is not possible.

Comment by Johannes Schmitt [ 20/Jan/13 ]

A too bad. I guess the code around inheritance is already quite complex that it does not make sense to add an exception for this case.

Do you think it would somehow (maybe manually) be possible to load collections in a batch operation? For example, something like this:

$batch = array();
foreach ($comments as $comment) {
    if ($comment instanceof SpecialComment) {
        $batch[] = $comment->getSpecialAssociation();
    }
}

$this->em->batchLoad($batch);
Generated at Tue Sep 30 12:06:41 UTC 2014 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.