[DDC-1352] ErrorException: Undefined index in array Created: 30/Aug/11  Updated: 01/Sep/11  Resolved: 01/Sep/11

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

Type: Bug Priority: Critical
Reporter: Søren Assignee: Guilherme Blanco
Resolution: Invalid Votes: 0
Labels: None
Environment:

Windows 7, PHP 5.3.3



 Description   

The following query:
"select c.id
from \\Domain
Cuisine c
left join c.nameTranslation t
left join t.translationValues v
left join v.language l
where v.value = :name
and l.id = :languageId"

Results in a PHP ErrorException in \Doctrine\ORM\Query\SqlWalker line 745:
$assoc = ( ! $relation['isOwningSide']) ? $targetClass->associationMappings[$relation['mappedBy']] : $relation;

When I step through the execution, the array entry: $relation['mappedBy'] gets the following value: "Domain\Translation" in the scope where the error occurs.
$targetClass->associationMappings has the following indices: "translation" and "language" and this leads to a "Undefined index" error and the execution breaks. It means that I cannot execute DQL queries, which is critical for the application to run.

<entity name="Domain\Cuisine" table="Cuisine" repository-class="Infrastructure\Persistence\Doctrine\Repository\CuisineRepository">
<id name="id" type="integer" column="Id">
<generator strategy="AUTO"/>
</id>
<many-to-one target-entity="Domain\Translation" field="nameTranslation">
<join-column name="NameTranslation_Id" referenced-column-name="Id"/>
</many-to-one>
</entity>

<entity name="Domain\Translation" table="Translations">
<id name="id" type="integer" column="Id">
<generator strategy="AUTO" />
</id>
<one-to-many target-entity="Domain\TranslationValue" mapped-by="Domain\Translation" field="translationValues" orphan-removal="true">
<cascade>
<cascade-all/>
</cascade>
</one-to-many>
</entity>

<entity name="Domain\TranslationValue" table="TranslationValues">
<id name="id" type="integer" column="Id">
<generator strategy="AUTO" />
</id>

<field name="value" type="string" column="Value" />

<many-to-one field="translation" target-entity="Domain\Translation">
<join-column name="Translation_Id" nullable="false" referenced-column-name="Id" />
</many-to-one>

<many-to-one field="language" target-entity="Domain\Language">
<join-column name="Language_Id" nullable="false" referenced-column-name="Id" />
</many-to-one>
</entity>

<entity name="Domain\Language" table="Languages" repository-class="\Infrastructure\Persistence\Doctrine\Repository\TranslationRepository">
<id name="id" type="integer" column="Id">
<generator strategy="AUTO" />
</id>
<field name="name" type="string" column="Name" />
<field name="shortIsoCode" type="string" column="ShortIsoCode"/>
<field name="longIsoCode" type="string" column="LongIsoCode"/>
<field name="isDefault" type="boolean" column="IsDefault" />
</entity>



 Comments   
Comment by Guilherme Blanco [ 01/Sep/11 ]

Your mapping information is wrong.
The mappedBy value must reference the field name of the owning side, and not the class name.

Marking ticket as invalid.

Generated at Thu Nov 27 22:12:45 UTC 2014 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.