Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-1410

leftJoin with condition WITH & Object Hydratation problem.

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Blocker Blocker
    • Resolution: Fixed
    • Affects Version/s: Git Master
    • Fix Version/s: 2.1.3
    • Component/s: DQL, ORM
    • Security Level: All
    • Labels:
      None
    • Environment:
      Debian 5 dotdeb
      PHP 5.3
      MySQL 5.0
      Apache 2.2

      Description

      Here an example of a simple QueryBuilder :

      $queryBuilder = $entityManager->createQueryBuilder();
      $queryBuilder->select ( "player, options" );
      $queryBuilder->from ( "Player_Model_Entity_Player", "player");
      $queryBuilder->where ("player.idPlayer = 12");
      $queryBuilder->leftJoin ("player.options", "options", "WITH", "options.enabled = :enabled");
      $queryBuilder->setParameter ("enabled", 1);

      OptionA & OptionB & OptionC three entities.
      User case :

      • OptionA.enabled = 1 & OptionB.enabled = 1 & OptionC.enabled = 1 : OK - All options are return.
      • OptionA.enabled = 1 & OptionB.enabled = 0 & OptionC.enabled = 0 : OK - only optionA is return.
      • OptionA.enabled = 1 & OptionB.enabled = 0 & OptionC.enabled = 1 : OK - only optionA & optionC is return.
      • OptionA.enabled = 0 & OptionB.enabled = 1 & OptionC.enabled = 1 : KO - no option return.
      • OptionA.enabled = 0 & OptionB.enabled = 0 & OptionC.enabled = 0 : OK - no option return.

      I have test on OneToMany configuration and I have not problem. The problem only appear with ManyToMany relationships.

      The problem seems to be on hydratation. The data return on SQL command seems to be correct.

        Activity

        Hide
        Thomas Tourlourat - Armetiz added a comment - - edited

        PlayerEntity :

        <?xml version="1.0" encoding="UTF-8"?>
        <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                            http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
        	<entity name="PlayerEntity">
        		<many-to-many field="options" target-entity="OptionEntity" mapped-by="players" />
        	</entity>
        </doctrine-mapping>
        {/code}
        
        

        <?xml version="1.0" encoding="UTF-8"?>
        <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
        http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd" >
        <entity name="OptionEntity" table="options">
        <many-to-many field="players" target-entity="PlayerEntity" inversed-by="options">
        <cascade>
        <cascade-merge />
        </cascade>
        <join-table name="compo_option_player" />
        </many-to-many>
        </entity>
        </doctrine-mapping>

        {/code}

        I have post all the mapping, but it's Doctrine compliant.
        PlayerEntity extends PlayerBaseEntity, and Option is a standalone Entity.
        All define an auto generated identifier.
        The join table is correctly configured.

        Do you need this mapping to create tests ?
        To sum-up, this is a simply ManyToMany relation between an inheritance Entity & a simple Entity.

        Do you need any else ?

        Thomas.

        Show
        Thomas Tourlourat - Armetiz added a comment - - edited PlayerEntity : <?xml version= "1.0" encoding= "UTF-8" ?> <doctrine-mapping xmlns= "http: //doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi= "http: //www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http: //doctrine-project.org/schemas/orm/doctrine-mapping http: //doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> <entity name= "PlayerEntity" > <many-to-many field= "options" target-entity= "OptionEntity" mapped-by= "players" /> </entity> </doctrine-mapping> {/code} <?xml version="1.0" encoding="UTF-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd " > <entity name="OptionEntity" table="options"> <many-to-many field="players" target-entity="PlayerEntity" inversed-by="options"> <cascade> <cascade-merge /> </cascade> <join-table name="compo_option_player" /> </many-to-many> </entity> </doctrine-mapping> {/code} I have post all the mapping, but it's Doctrine compliant. PlayerEntity extends PlayerBaseEntity, and Option is a standalone Entity. All define an auto generated identifier. The join table is correctly configured. Do you need this mapping to create tests ? To sum-up, this is a simply ManyToMany relation between an inheritance Entity & a simple Entity. Do you need any else ? Thomas.
        Hide
        Benjamin Eberlei added a comment -

        Fixed.

        Show
        Benjamin Eberlei added a comment - Fixed.
        Hide
        Benjamin Eberlei added a comment -

        This issue is referenced in Github Pull-Request GH-161
        https://github.com/doctrine/doctrine2/pull/161

        Show
        Benjamin Eberlei added a comment - This issue is referenced in Github Pull-Request GH-161 https://github.com/doctrine/doctrine2/pull/161
        Hide
        Benjamin Eberlei added a comment -

        A related Github Pull-Request [GH-161] was opened
        https://github.com/doctrine/dbal/pull/161

        Show
        Benjamin Eberlei added a comment - A related Github Pull-Request [GH-161] was opened https://github.com/doctrine/dbal/pull/161
        Hide
        Benjamin Eberlei added a comment -

        A related Github Pull-Request [GH-161] was closed
        https://github.com/doctrine/dbal/pull/161

        Show
        Benjamin Eberlei added a comment - A related Github Pull-Request [GH-161] was closed https://github.com/doctrine/dbal/pull/161

          People

          • Assignee:
            Benjamin Eberlei
            Reporter:
            Thomas Tourlourat - Armetiz
          • Votes:
            2 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: