Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-2290

Infer custom Types from the field for query parameters

    Details

    • Type: Improvement Improvement
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: None
    • Security Level: All
    • Labels:
      None

      Description

      When using a mapping Type that declares convertToDatabaseValue, the method is not always called in queries.

      Example:

      SELECT ... WHERE entity.field = ?1
      

      (with entity.field being of custom type 'the_mapping_type')

      Type::convertToDatabaseValue() is correctly called when using:

      $query->setParameter('1', 'foo', 'the_mapping_type');
      

      But it is not called when using:

      $query->setParameter('1', 'foo');
      

      which gives a query that returns invalid results.

      Like other mapping types in this situation, there is no reason the type is not inferred automatically from the field.

      I have written a failing test case in Doctrine\Tests\ORM\Functional\TypeValueSqlTest:

          public function testQueryParameterWithoutType()
          {
              $entity = new CustomTypeUpperCase();
              $entity->lowerCaseString = 'foo';
      
              $this->_em->persist($entity);
              $this->_em->flush();
      
              $id = $entity->id;
      
              $this->_em->clear();
      
              $query = $this->_em->createQuery('SELECT c.id from Doctrine\Tests\Models\CustomType\CustomTypeUpperCase c where c.lowerCaseString = ?1');
              $query->setParameter('1', 'foo');
      
              $result = $query->getResult();
      
              $this->assertCount(1, $result);
              $this->assertEquals($id, $result[0]['id']);
          }
      

        Activity

        Hide
        Benjamin Morel added a comment - - edited

        Any news on this one? Also, I just noticed that it does not cover the original problem I've reported in DDC-2224: I was specifically talking about convertToDatabaseValueSQL() and not convertToDatabaseValue().
        My problem is that even when passing the third parameter $type, it does not use the conversion function from convertToDatabaseValueSQL().

        Should we reopen DDC-2224?

        Show
        Benjamin Morel added a comment - - edited Any news on this one? Also, I just noticed that it does not cover the original problem I've reported in DDC-2224 : I was specifically talking about convertToDatabaseValueSQL() and not convertToDatabaseValue() . My problem is that even when passing the third parameter $type , it does not use the conversion function from convertToDatabaseValueSQL() . Should we reopen DDC-2224 ?
        Hide
        Matthieu Napoli added a comment -

        The organization name has changed so the previous URL is a 404.

        Here is the branch containing the failing testcase: https://github.com/myclabs/doctrine2/tree/DDC-2290

        Show
        Matthieu Napoli added a comment - The organization name has changed so the previous URL is a 404. Here is the branch containing the failing testcase: https://github.com/myclabs/doctrine2/tree/DDC-2290
        Hide
        Matthieu Napoli added a comment -
        Show
        Matthieu Napoli added a comment - The test is in this branch: https://github.com/myc-sense/doctrine2/tree/DDC-2290
        Show
        Matthieu Napoli added a comment - See also http://www.doctrine-project.org/jira/browse/DDC-2224

          People

          • Assignee:
            Benjamin Eberlei
            Reporter:
            Matthieu Napoli
          • Votes:
            3 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

            • Created:
              Updated: