Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-1939

Trying to save ManyToMany relatrionship

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.2
    • Fix Version/s: 2.2.3, 2.3
    • Component/s: ORM
    • Security Level: All
    • Labels:
      None

      Description

      When i try to save a many to many relationship i have to following error

      Fatal error: Call to a member function getOwner() on a non-object in Doctrine/ORM/Persisters/ManyToManyPersister.php on line 181

      It tries to call getOwner on the following array ($mapping)

      array(19) {
      ["fieldName"] => string(10) "privileges"
      ["joinTable"] => array(4) {
      ["name"] => string(36) "fsbackend.user_mch_account_privilege"
      ["schema"] => NULL
      ["joinColumns"] => array(2) {
      [0] => array(6)

      { ["name"] => string(13) "mch_accountid" ["referencedColumnName"] => string(13) "mch_accountid" ["unique"] => bool(false) ["nullable"] => bool(true) ["onDelete"] => NULL ["columnDefinition"] => NULL }

      [1] => array(6)

      { ["name"] => string(3) "uid" ["referencedColumnName"] => string(3) "uid" ["unique"] => bool(false) ["nullable"] => bool(true) ["onDelete"] => NULL ["columnDefinition"] => NULL }

      }
      ["inverseJoinColumns"] => array(1) {
      [0] => array(6)

      { ["name"] => string(10) "resourceid" ["referencedColumnName"] => string(10) "resourceid" ["unique"] => bool(false) ["nullable"] => bool(true) ["onDelete"] => NULL ["columnDefinition"] => NULL }

      }
      }
      ["targetEntity"] => string(21) "Entity\User\Privilege"
      ["mappedBy"] => NULL
      ["inversedBy"] => NULL
      ["cascade"] => array(0) {
      }
      ["indexBy"] => string(10) "resourceid"
      ["fetch"] => int(2)
      ["type"] => int(8)
      ["isOwningSide"] => bool(true)
      ["sourceEntity"] => string(26) "Entity\Merchant\Membership"
      ["isCascadeRemove"] => bool(false)
      ["isCascadePersist"] => bool(false)
      ["isCascadeRefresh"] => bool(false)
      ["isCascadeMerge"] => bool(false)
      ["isCascadeDetach"] => bool(false)
      ["relationToSourceKeyColumns"] => array(2)

      { ["mch_accountid"] => string(13) "mch_accountid" ["uid"] => string(3) "uid" }

      ["joinTableColumns"] => array(3)

      { [0] => string(13) "mch_accountid" [1] => string(3) "uid" [2] => string(10) "resourceid" }

      ["relationToTargetKeyColumns"] => array(1)

      { ["resourceid"] => string(10) "resourceid" }

      }

      1. Membership.php
        0.9 kB
        Jeremie Tom tom
      2. Privileges.php
        0.3 kB
        Jeremie Tom tom
      3. UserAccount.php
        0.6 kB
        Jeremie Tom tom

        Activity

        Jeremie Tom tom created issue -
        Hide
        Marco Pivetta added a comment -

        Can you try to replace your cache with an `ArrayCache` and see if the problem may come from there?
        It would also be interesting to see your bootstrap code and the code you use to interact with the collection.

        Show
        Marco Pivetta added a comment - Can you try to replace your cache with an `ArrayCache` and see if the problem may come from there? It would also be interesting to see your bootstrap code and the code you use to interact with the collection.
        Hide
        Jeremie Tom tom added a comment - - edited

        I'm already using an ArrayCache for my cache.

        Also for my bootstrap I'm using this implementation of it : https://github.com/guilhermeblanco/ZendFramework1-Doctrine2.

        Here is how i interact with the collection.

        $collection->clear();
        foreach ($values as $value) {
        $collection->add(
        $this->_em->getReference(
        'Entity\User\Privilege',
        $value
        ));}

        ... Later on ...
        ... I have an entity $userAccount with many memberships set to Cascade persist, ....
        ... and on the membership entity relationship i have my collection ...

        $this->_em->persist($userAccount);
        $this->_em->flush();

        Show
        Jeremie Tom tom added a comment - - edited I'm already using an ArrayCache for my cache. Also for my bootstrap I'm using this implementation of it : https://github.com/guilhermeblanco/ZendFramework1-Doctrine2 . Here is how i interact with the collection. $collection->clear(); foreach ($values as $value) { $collection->add( $this->_em->getReference( 'Entity\User\Privilege', $value )); } ... Later on ... ... I have an entity $userAccount with many memberships set to Cascade persist, .... ... and on the membership entity relationship i have my collection ... $this->_em->persist($userAccount); $this->_em->flush();
        Hide
        Jeremie Tom tom added a comment -

        I don't know if it helps but it works if I replace $mapping with $coll on line 181 :

        $sourceClass = $this->_em->getClassMetadata(get_class($mapping->getOwner()));

        Replaced by :

        $sourceClass = $this->_em->getClassMetadata(get_class($coll->getOwner()));

        Show
        Jeremie Tom tom added a comment - I don't know if it helps but it works if I replace $mapping with $coll on line 181 : $sourceClass = $this->_em->getClassMetadata(get_class($mapping->getOwner())); Replaced by : $sourceClass = $this->_em->getClassMetadata(get_class($coll->getOwner()));
        Hide
        Marco Pivetta added a comment -

        Looks like code coming from the (removed) AssociationMapping class. The fix seems also to be valid. I'm patching this.

        Show
        Marco Pivetta added a comment - Looks like code coming from the (removed) AssociationMapping class. The fix seems also to be valid. I'm patching this.
        Marco Pivetta made changes -
        Field Original Value New Value
        Assignee Benjamin Eberlei [ beberlei ] Marco Pivetta [ ocramius ]
        Hide
        Marco Pivetta added a comment -

        Nevermind, I don't think this needs a test. It is just something overlooked during a refactoring. Being handled at DDC-1941

        Show
        Marco Pivetta added a comment - Nevermind, I don't think this needs a test. It is just something overlooked during a refactoring. Being handled at DDC-1941
        Hide
        Marco Pivetta added a comment -

        Could you please provide the models anyway? It would be interesting to see why the test suite doesn't cover that part
        Thank you!

        Show
        Marco Pivetta added a comment - Could you please provide the models anyway? It would be interesting to see why the test suite doesn't cover that part Thank you!
        Hide
        Jeremie Tom tom added a comment - - edited

        Ok I attached it. Tell me if you need more informations i didn't upload the full models. But just the parts i thought were relevant.

        Show
        Jeremie Tom tom added a comment - - edited Ok I attached it. Tell me if you need more informations i didn't upload the full models. But just the parts i thought were relevant.
        Jeremie Tom tom made changes -
        Attachment Membership.php [ 11210 ]
        Attachment UserAccount.php [ 11211 ]
        Attachment Privileges.php [ 11212 ]
        Hide
        Benjamin Eberlei added a comment -

        Fixed and applied to 2.2.3 and 2.3

        Show
        Benjamin Eberlei added a comment - Fixed and applied to 2.2.3 and 2.3
        Benjamin Eberlei made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Fix Version/s 2.2.3 [ 10196 ]
        Fix Version/s 2.3 [ 10185 ]
        Resolution Fixed [ 1 ]

        This list may be incomplete, as errors occurred whilst retrieving source from linked applications:

        • Request to http://www.doctrine-project.org/fisheye/ failed: Error in remote call to 'FishEye 0 (http://www.doctrine-project.org/fisheye/)' (http://www.doctrine-project.org/fisheye) [AbstractRestCommand{path='/rest-service-fe/search-v1/crossRepositoryQuery', params={query=DDC-1939, expand=changesets[0:20].revisions[0:29],reviews}, methodType=GET}] : Received status code 503 (Service Temporarily Unavailable)

          People

          • Assignee:
            Marco Pivetta
            Reporter:
            Jeremie Tom tom
          • Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: