[2.0][DDC-345] Fixed.
This commit is contained in:
parent
4685a9ab6a
commit
82e42123de
@ -219,7 +219,8 @@ final class Query extends AbstractQuery
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (is_object($value)) {
|
if (is_object($value)) {
|
||||||
$values = $this->_em->getClassMetadata(get_class($value))->getIdentifierValues($value);
|
//$values = $this->_em->getClassMetadata(get_class($value))->getIdentifierValues($value);
|
||||||
|
$values = $this->_em->getUnitOfWork()->getEntityIdentifier($value);
|
||||||
//var_dump($this->_em->getUnitOfWork()->getEntityIdentifier($value));
|
//var_dump($this->_em->getUnitOfWork()->getEntityIdentifier($value));
|
||||||
$sqlPositions = $paramMappings[$key];
|
$sqlPositions = $paramMappings[$key];
|
||||||
$sqlParams = array_merge($sqlParams, array_combine((array)$sqlPositions, $values));
|
$sqlParams = array_merge($sqlParams, array_combine((array)$sqlPositions, $values));
|
||||||
|
@ -607,7 +607,6 @@ class UnitOfWork implements PropertyChangedListener
|
|||||||
$idGen = $targetClass->idGenerator;
|
$idGen = $targetClass->idGenerator;
|
||||||
if ( ! $idGen->isPostInsertGenerator()) {
|
if ( ! $idGen->isPostInsertGenerator()) {
|
||||||
$idValue = $idGen->generate($this->_em, $entry);
|
$idValue = $idGen->generate($this->_em, $entry);
|
||||||
$this->_entityStates[$oid] = self::STATE_MANAGED;
|
|
||||||
if ( ! $idGen instanceof \Doctrine\ORM\Id\Assigned) {
|
if ( ! $idGen instanceof \Doctrine\ORM\Id\Assigned) {
|
||||||
$this->_entityIdentifiers[$oid] = array($targetClass->identifier[0] => $idValue);
|
$this->_entityIdentifiers[$oid] = array($targetClass->identifier[0] => $idValue);
|
||||||
$targetClass->getSingleIdReflectionProperty()->setValue($entry, $idValue);
|
$targetClass->getSingleIdReflectionProperty()->setValue($entry, $idValue);
|
||||||
@ -616,6 +615,7 @@ class UnitOfWork implements PropertyChangedListener
|
|||||||
}
|
}
|
||||||
$this->addToIdentityMap($entry);
|
$this->addToIdentityMap($entry);
|
||||||
}
|
}
|
||||||
|
$this->_entityStates[$oid] = self::STATE_MANAGED;
|
||||||
|
|
||||||
// NEW entities are INSERTed within the current unit of work.
|
// NEW entities are INSERTed within the current unit of work.
|
||||||
$this->_entityInsertions[$oid] = $entry;
|
$this->_entityInsertions[$oid] = $entry;
|
||||||
|
@ -615,7 +615,7 @@ class BasicFunctionalTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
/**
|
/**
|
||||||
* @group ref
|
* @group ref
|
||||||
*/
|
*/
|
||||||
/*public function testQueryEntityByReference()
|
public function testQueryEntityByReference()
|
||||||
{
|
{
|
||||||
$user = new CmsUser;
|
$user = new CmsUser;
|
||||||
$user->name = 'Guilherme';
|
$user->name = 'Guilherme';
|
||||||
@ -633,13 +633,21 @@ class BasicFunctionalTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$this->_em->flush();
|
$this->_em->flush();
|
||||||
$this->_em->clear();
|
$this->_em->clear();
|
||||||
|
|
||||||
|
//$this->_em->getConnection()->getConfiguration()->setSqlLogger(new \Doctrine\DBAL\Logging\EchoSqlLogger);
|
||||||
|
|
||||||
$userRef = $this->_em->getReference('Doctrine\Tests\Models\CMS\CmsUser', $user->getId());
|
$userRef = $this->_em->getReference('Doctrine\Tests\Models\CMS\CmsUser', $user->getId());
|
||||||
$address2 = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsAddress a where a.user = :user')
|
$address2 = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsAddress a where a.user = :user')
|
||||||
->setParameter('user', $userRef)
|
->setParameter('user', $userRef)
|
||||||
->getSingleResult();
|
->getSingleResult();
|
||||||
|
|
||||||
|
$this->assertTrue($address2->getUser() instanceof \Doctrine\ORM\Proxy\Proxy);
|
||||||
|
$this->assertTrue($userRef === $address2->getUser());
|
||||||
|
$this->assertFalse($userRef->__isInitialized__);
|
||||||
|
$this->assertEquals('Germany', $address2->country);
|
||||||
|
$this->assertEquals('Berlin', $address2->city);
|
||||||
|
$this->assertEquals('12345', $address2->zip);
|
||||||
|
|
||||||
}*/
|
}
|
||||||
|
|
||||||
//DRAFT OF EXPECTED/DESIRED BEHAVIOR
|
//DRAFT OF EXPECTED/DESIRED BEHAVIOR
|
||||||
/*public function testPersistentCollectionContainsDoesNeverInitialize()
|
/*public function testPersistentCollectionContainsDoesNeverInitialize()
|
||||||
|
157
tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php
Normal file
157
tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||||
|
|
||||||
|
require_once __DIR__ . '/../../../TestInit.php';
|
||||||
|
|
||||||
|
class DDC345Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||||
|
{
|
||||||
|
protected function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
//$this->_em->getConnection()->getConfiguration()->setSqlLogger(new \Doctrine\DBAL\Logging\EchoSqlLogger);
|
||||||
|
$this->_schemaTool->createSchema(array(
|
||||||
|
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC345User'),
|
||||||
|
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC345Group'),
|
||||||
|
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC345Membership'),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTwoIterateHydrations()
|
||||||
|
{
|
||||||
|
// Create User
|
||||||
|
$user = new DDC345User;
|
||||||
|
$user->name = 'Test User';
|
||||||
|
$this->_em->persist($user); // $em->flush() does not change much here
|
||||||
|
|
||||||
|
// Create Group
|
||||||
|
$group = new DDC345Group;
|
||||||
|
$group->name = 'Test Group';
|
||||||
|
$this->_em->persist($group); // $em->flush() does not change much here
|
||||||
|
|
||||||
|
$membership = new DDC345Membership;
|
||||||
|
$membership->group = $group;
|
||||||
|
$membership->user = $user;
|
||||||
|
$membership->state = 'active';
|
||||||
|
|
||||||
|
//$this->_em->persist($membership); // COMMENT OUT TO SEE BUG
|
||||||
|
/*
|
||||||
|
This should be not necessary, but without, its PrePersist is called twice,
|
||||||
|
$membership seems to be persisted twice, but all properties but the
|
||||||
|
ones set by LifecycleCallbacks are deleted.
|
||||||
|
*/
|
||||||
|
|
||||||
|
$user->Memberships->add($membership);
|
||||||
|
$group->Memberships->add($membership);
|
||||||
|
|
||||||
|
$this->_em->flush();
|
||||||
|
|
||||||
|
$this->assertEquals(1, $membership->prePersistCallCount);
|
||||||
|
$this->assertEquals(0, $membership->preUpdateCallCount);
|
||||||
|
$this->assertTrue($membership->updated instanceof \DateTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Entity
|
||||||
|
*/
|
||||||
|
class DDC345User
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @Id
|
||||||
|
* @Column(type="integer")
|
||||||
|
* @GeneratedValue
|
||||||
|
*/
|
||||||
|
public $id;
|
||||||
|
|
||||||
|
/** @Column(type="string") */
|
||||||
|
public $name;
|
||||||
|
|
||||||
|
/** @OneToMany(targetEntity="DDC345Membership", mappedBy="user", cascade={"persist"}) */
|
||||||
|
public $Memberships;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->Memberships = new \Doctrine\Common\Collections\ArrayCollection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Entity
|
||||||
|
*/
|
||||||
|
class DDC345Group
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @Id
|
||||||
|
* @Column(type="integer")
|
||||||
|
* @GeneratedValue
|
||||||
|
*/
|
||||||
|
public $id;
|
||||||
|
|
||||||
|
/** @Column(type="string") */
|
||||||
|
public $name;
|
||||||
|
|
||||||
|
/** @OneToMany(targetEntity="DDC345Membership", mappedBy="group", cascade={"persist"}) */
|
||||||
|
public $Memberships;
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->Memberships = new \Doctrine\Common\Collections\ArrayCollection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Entity
|
||||||
|
* @HasLifecycleCallbacks
|
||||||
|
* @Table(name="ddc345_memberships", uniqueConstraints={
|
||||||
|
* @UniqueConstraint(name="ddc345_memship_fks", columns={"user_id","group_id"})
|
||||||
|
* })
|
||||||
|
*/
|
||||||
|
class DDC345Membership
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @Id
|
||||||
|
* @Column(type="integer")
|
||||||
|
* @GeneratedValue
|
||||||
|
*/
|
||||||
|
public $id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OneToOne(targetEntity="DDC345User")
|
||||||
|
* @JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
|
||||||
|
*/
|
||||||
|
public $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OneToOne(targetEntity="DDC345Group")
|
||||||
|
* @JoinColumn(name="group_id", referencedColumnName="id", nullable=false)
|
||||||
|
*/
|
||||||
|
public $group;
|
||||||
|
|
||||||
|
/** @Column(type="string") */
|
||||||
|
public $state;
|
||||||
|
|
||||||
|
/** @Column(type="datetime") */
|
||||||
|
public $updated;
|
||||||
|
|
||||||
|
public $prePersistCallCount = 0;
|
||||||
|
public $preUpdateCallCount = 0;
|
||||||
|
|
||||||
|
/** @PrePersist */
|
||||||
|
public function doStuffOnPrePersist()
|
||||||
|
{
|
||||||
|
//echo "***** PrePersist\n";
|
||||||
|
++$this->prePersistCallCount;
|
||||||
|
$this->updated = new \DateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @PreUpdate */
|
||||||
|
public function doStuffOnPreUpdate()
|
||||||
|
{
|
||||||
|
//echo "***** PreUpdate\n";
|
||||||
|
++$this->preUpdateCallCount;
|
||||||
|
$this->updated = new \DateTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user