Hi Jasper,

When i browse into the Doctrine in /vendor/doctrine, i see the doctrine 
version is 2.4.1.
I will explain you my case in detail to show you 2 'bugs' that i 
encourtered :

First here is my class :

<?php 

namespace Functional\BuildBundle\Entity\Unit;

use Doctrine\ORM\Mapping as ORM;

/**
 * 
@ORM\Entity(repositoryClass="Functional\BuildBundle\Entity\Unit\Repository\UserUnitRepository")
 * @ORM\Table(name="_user_unit")
 */
class UserUnit
{
    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Functional\UserBundle\Entity\User", 
inversedBy="units")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id", 
nullable=false)
     */
    private $user;
    
    /**
     * @ORM\Id
     * 
@ORM\ManyToOne(targetEntity="Functional\BuildBundle\Entity\Unit\Unit")
     * @ORM\JoinColumn(name="unit_id", referencedColumnName="id", 
nullable=false)
     */
    private $unit;
    
    /**
     * @ORM\Column(type="integer")
     */
    private $value;
    
    /**
     * @ORM\Version
     * @ORM\Column(type="integer", name="version")
     */
    private $version;

   [...] // get and setters after this
}

Now when i insert a first row i create it like this :

$userUnit = new UserUnit();
                
$unit = $this->getUnitRepository()->find($unitId);
$userUnit->setUnit($unit);
$userUnit->setUser($user);
$userUnit->setValue($quantity);
                
 $this->getUserUnitRepository()->save($userUnit);

The save method call a persist and a flush on the entityManager.

At this moment i was a 'bug' because Doctrine try to find the default 
version value to assign and there was an error (he doesn't use the id 
according to the entities) :

ContextErrorException: Catchable Fatal Error: Object of class 
Proxies\__CG__\Functional\BuildBundle\Entity\Unit\Unit could not be 
converted to string in 
C:\Developpement\wamp3\www\Systris\vendor\doctrine\dbal\lib\Doctrine\DBAL\Connection.php
 
line 695 

   1. in 
   
C:\Developpement\wamp3\www\Systris\vendor\doctrine\dbal\lib\Doctrine\DBAL\Connection.php
 
   line 695
   2. at ErrorHandler->handle('4096', 'Object of class 
   Proxies\__CG__\Functional\BuildBundle\Entity\Unit\Unit could not be 
   converted to string', 
   
'C:\Developpement\wamp3\www\Systris\vendor\doctrine\dbal\lib\Doctrine\DBAL\Connection.php',
 
   '695', *array*('query' => 'SELECT version FROM _user_unit WHERE user_id 
   = ? AND unit_id = ?', 'params' => *array*(*object*(User), *object*(Unit)), 
   'types' => *array*(), 'qcp' => *null*, 'logger' => *object*(LoggerChain), 
   'stmt' => *object*(PDOStatement)))
   3. at PDOStatement->execute(*array*(*object*(User), *object*(Unit))) in 
   
C:\Developpement\wamp3\www\Systris\vendor\doctrine\dbal\lib\Doctrine\DBAL\Connection.php
 
   line 695
   4. at Connection->executeQuery('SELECT version FROM _user_unit WHERE 
   user_id = ? AND unit_id = ?', *array*(*object*(User), *object*(Unit))) 
   in 
   
C:\Developpement\wamp3\www\Systris\vendor\doctrine\dbal\lib\Doctrine\DBAL\Connection.php
 
   line 419
   5. at Connection->fetchColumn('SELECT version FROM _user_unit WHERE 
   user_id = ? AND unit_id = ?', *array*(*object*(User), *object*(Unit))) 
   in 
   
C:\Developpement\wamp3\www\Systris\vendor\doctrine\orm\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php
 
   line 336
   6. at BasicEntityPersister->fetchVersionValue(*object*(ClassMetadata), 
   *array*('user' => *object*(User), 'unit' => *object*(Unit))) in 
   
C:\Developpement\wamp3\www\Systris\vendor\doctrine\orm\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php
 
   line 311
   7. at BasicEntityPersister->assignDefaultVersionValue(*object*(UserUnit), 
   *array*('user' => *object*(User), 'unit' => *object*(Unit))) in 
   
C:\Developpement\wamp3\www\Systris\vendor\doctrine\orm\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php
 
   line 289
   8. at BasicEntityPersister->executeInserts() in 
   
C:\Developpement\wamp3\www\Systris\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php
 
   line 952
   9. at UnitOfWork->executeInserts(*object*(ClassMetadata)) in 
   
C:\Developpement\wamp3\www\Systris\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php
 
   line 335
   10. at UnitOfWork->commit(*null*) in 
   
C:\Developpement\wamp3\www\Systris\vendor\doctrine\orm\lib\Doctrine\ORM\EntityManager.php
 
   line 389
   11. at EntityManager->flush() in 
   
C:\Developpement\wamp3\www\Systris\src\Technical\GeneralBundle\Entity\Repository\BaseEntityRepository.php
 
   line 11
   12. at BaseEntityRepository->save(*object*(UserUnit)) in 
   
C:\Developpement\wamp3\www\Systris\src\Functional\BuildBundle\Service\BuildService.php
 
   line 99
   13. at BuildService->buildUnit(*object*(User), '1', '10', '0') in 
   
C:\Developpement\wamp3\www\Systris\src\Technical\QueueBundle\Service\QueueService.php
 
   line 214

Then i wrote a quick fix for this add a __toString method to Unit object 
returning the id as string and it works.

After this i try the update one UserUnit with this code :

$userUnit = $this->getUserUnitRepository()->findOneBy(array('user' => 
$user->getId(), 'unit' => $unitId));
$unitEntityLockRunner = new UnitEntityLockRunner($quantity);
$this->getUserUnitRepository()->update($userUnit, $unitEntityLockRunner);

The $userUnit object has a field version with 0 instead of having the 
correct value from database which is 1 or 2.

If you need some extra informations please tell me and if you have some 
explanations i will be happy to here them ;)

Thanks.

Best regards,
David.


-- 
You received this message because you are subscribed to the Google Groups 
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to