Skip to content

Loading…

DDC-1150: BasicEntityPersister::expandParameters does not check assiciation mapping when expanding parameters #1751

Closed
doctrinebot opened this Issue · 7 comments

2 participants

@doctrinebot

Jira issue originally created by user realmfoo:

If you try to find entities, filtering them by field with association mapping (ManyToOne) and use an array as a filter argument it will not work:

    $em->getRepository('EntityBundle:Entity')->findBy(array('child' => array(1,2,3)));
    8 Array to string conversion vendor/doctrine-dbal/lib/Doctrine/DBAL/Connection.php 595

I fixed method BasicEntityPersister::expandParameters:


Index: ../vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php
===================================================================
@@ -1300,6 <ins>1300,9 @@
             if (isset($this->_class->fieldMappings[$field])) {
                 $type = Type::getType($this->_class->fieldMappings[$field]['type'])->getBindingType();
             }
</ins>            if (isset($this->_class->associationMappings[$field])) {
<ins>                $type = $this->_class->associationMappings[$field]['type'];
</ins>            }
             if (is_array($value)) {
                 $type += Connection::ARRAY*PARAM*OFFSET;
             }
@doctrinebot

Comment created by @beberlei:

What is $this->_class->associationMappings[$field]['type'] supposed to be? This key does not exist

@doctrinebot

Comment created by realmfoo:

The key exists when ToMany association is used. $field['type'] is a real Doctrine's type of the field, because fieldMappings contains entity type of association.

Checking of this key in Doctrine itself:
https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php#L386

@doctrinebot

Comment created by @beberlei:

Yes buts its the type of the association, MANYTO_ONE ,ONE_TOMANY, etc, etc..The type of the associated column is not really known.

@doctrinebot

Comment created by realmfoo:

Heh, I was lucky, thanks for pointing it out :)

In any case we still can find this type by the target class. May be it will be a good to cache it in the associationMappings array (by functions like _validateAndCompleteOneToOneMapping)?

@doctrinebot

Comment created by @beberlei:

At that point you still don't have the information since its saved on the related association and we don't access it at this point (otherwise you get a riffling effect and everything is in memory). We could just assume it is PDO::PARAM_STR.

@doctrinebot

Comment created by @guilhermeblanco:

This issue was fixed in 63a2f02

Thanks for the report and attempting to fix the issue. =)

@doctrinebot

Issue was closed with resolution "Fixed"

@doctrinebot doctrinebot added this to the 2.2 milestone
@doctrinebot doctrinebot closed this
@doctrinebot doctrinebot added the Bug label
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.