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

Closed
doctrinebot opened this Issue May 13, 2011 · 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 Dec 6, 2015
@doctrinebot doctrinebot closed this Dec 6, 2015
@doctrinebot doctrinebot added the Bug label Dec 7, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment