[DDC-1939] Trying to save ManyToMany relatrionship Created: 23/Jul/12  Updated: 29/Jul/12  Resolved: 29/Jul/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.2
Fix Version/s: 2.2.3, 2.3
Security Level: All

Type: Bug Priority: Major
Reporter: Jeremie Tom tom Assignee: Marco Pivetta
Resolution: Fixed Votes: 0
Labels: None

Attachments: File Membership.php     File Privileges.php     File UserAccount.php    

 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" }

}



 Comments   
Comment by Marco Pivetta [ 23/Jul/12 ]

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.

Comment by Jeremie Tom tom [ 23/Jul/12 ]

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();

Comment by Jeremie Tom tom [ 24/Jul/12 ]

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()));

Comment by Marco Pivetta [ 24/Jul/12 ]

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

Comment by Marco Pivetta [ 24/Jul/12 ]

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

Comment by Marco Pivetta [ 24/Jul/12 ]

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

Comment by Jeremie Tom tom [ 24/Jul/12 ]

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.

Comment by Benjamin Eberlei [ 29/Jul/12 ]

Fixed and applied to 2.2.3 and 2.3

Generated at Sun Oct 26 04:29:09 UTC 2014 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.