Create a failing test for issue #5989
Field with type=simple_array in a joined inheritance gets overridden by empty array in the hydrator
This commit is contained in:
parent
a2c23fb9cb
commit
dce0aeaa15
27
tests/Doctrine/Tests/Models/Issue5989/Issue5989Employee.php
Normal file
27
tests/Doctrine/Tests/Models/Issue5989/Issue5989Employee.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Tests\Models\Issue5989;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Entity
|
||||||
|
* @Table(name="issue5989_employees")
|
||||||
|
*/
|
||||||
|
class Issue5989Employee extends Issue5989Person
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @column(type="simple_array", nullable=true)
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $tags;
|
||||||
|
|
||||||
|
public function getTags()
|
||||||
|
{
|
||||||
|
return $this->tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setTags(array $tags)
|
||||||
|
{
|
||||||
|
$this->tags = $tags;
|
||||||
|
}
|
||||||
|
}
|
27
tests/Doctrine/Tests/Models/Issue5989/Issue5989Manager.php
Normal file
27
tests/Doctrine/Tests/Models/Issue5989/Issue5989Manager.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Tests\Models\Issue5989;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Entity
|
||||||
|
* @Table(name="issue5989_managers")
|
||||||
|
*/
|
||||||
|
class Issue5989Manager extends Issue5989Person
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @column(type="simple_array", nullable=true)
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $tags;
|
||||||
|
|
||||||
|
public function getTags()
|
||||||
|
{
|
||||||
|
return $this->tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setTags(array $tags)
|
||||||
|
{
|
||||||
|
$this->tags = $tags;
|
||||||
|
}
|
||||||
|
}
|
29
tests/Doctrine/Tests/Models/Issue5989/Issue5989Person.php
Normal file
29
tests/Doctrine/Tests/Models/Issue5989/Issue5989Person.php
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Tests\Models\Issue5989;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Entity
|
||||||
|
* @Table(name="issue5989_persons")
|
||||||
|
* @InheritanceType("JOINED")
|
||||||
|
* @DiscriminatorColumn(name="discr", type="string")
|
||||||
|
* @DiscriminatorMap({
|
||||||
|
* "person" = "Issue5989Person",
|
||||||
|
* "manager" = "Issue5989Manager",
|
||||||
|
* "employee" = "Issue5989Employee"
|
||||||
|
* })
|
||||||
|
*/
|
||||||
|
class Issue5989Person
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @Id
|
||||||
|
* @Column(type="integer")
|
||||||
|
* @GeneratedValue
|
||||||
|
*/
|
||||||
|
private $id;
|
||||||
|
|
||||||
|
public function getId()
|
||||||
|
{
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
}
|
51
tests/Doctrine/Tests/ORM/Functional/Ticket/Issue5989Test.php
Normal file
51
tests/Doctrine/Tests/ORM/Functional/Ticket/Issue5989Test.php
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||||
|
|
||||||
|
use Doctrine\Tests\Models\Issue5989\Issue5989Employee;
|
||||||
|
use Doctrine\Tests\Models\Issue5989\Issue5989Manager;
|
||||||
|
use Doctrine\Tests\Models\Issue5989\Issue5989Person;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group issue-5989
|
||||||
|
*/
|
||||||
|
class Issue5989Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||||
|
{
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
$this->useModelSet('issue5989');
|
||||||
|
parent::setUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSimpleArrayTypeHydratedCorrectlyInJoinedInheritance()
|
||||||
|
{
|
||||||
|
$manager = new Issue5989Manager();
|
||||||
|
|
||||||
|
$managerTags = array('tag1', 'tag2');
|
||||||
|
$manager->setTags($managerTags);
|
||||||
|
$this->_em->persist($manager);
|
||||||
|
|
||||||
|
$employee = new Issue5989Employee();
|
||||||
|
|
||||||
|
$employeeTags = array('tag2', 'tag3');
|
||||||
|
$employee->setTags($employeeTags);
|
||||||
|
$this->_em->persist($employee);
|
||||||
|
|
||||||
|
$this->_em->flush();
|
||||||
|
|
||||||
|
$managerId = $manager->getId();
|
||||||
|
$employeeId = $employee->getId();
|
||||||
|
|
||||||
|
// clear entity manager so that $repository->find actually fetches them and uses the hydrator
|
||||||
|
// instead of just returning the existing managed entities
|
||||||
|
$this->_em->clear();
|
||||||
|
|
||||||
|
$repository = $this->_em->getRepository(Issue5989Person::class);
|
||||||
|
|
||||||
|
$manager = $repository->find($managerId);
|
||||||
|
$employee = $repository->find($employeeId);
|
||||||
|
|
||||||
|
static::assertEquals($managerTags, $manager->getTags());
|
||||||
|
static::assertEquals($employeeTags, $employee->getTags());
|
||||||
|
}
|
||||||
|
}
|
@ -284,6 +284,11 @@ abstract class OrmFunctionalTestCase extends OrmTestCase
|
|||||||
'Doctrine\Tests\Models\VersionedManyToOne\Category',
|
'Doctrine\Tests\Models\VersionedManyToOne\Category',
|
||||||
'Doctrine\Tests\Models\VersionedManyToOne\Article',
|
'Doctrine\Tests\Models\VersionedManyToOne\Article',
|
||||||
),
|
),
|
||||||
|
'issue5989' => array(
|
||||||
|
'Doctrine\Tests\Models\Issue5989\Issue5989Person',
|
||||||
|
'Doctrine\Tests\Models\Issue5989\Issue5989Employee',
|
||||||
|
'Doctrine\Tests\Models\Issue5989\Issue5989Manager',
|
||||||
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -544,6 +549,12 @@ abstract class OrmFunctionalTestCase extends OrmTestCase
|
|||||||
$conn->executeUpdate('DELETE FROM versioned_many_to_one_category');
|
$conn->executeUpdate('DELETE FROM versioned_many_to_one_category');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($this->_usedModelSets['issue5989'])) {
|
||||||
|
$conn->executeUpdate('DELETE FROM issue5989_persons');
|
||||||
|
$conn->executeUpdate('DELETE FROM issue5989_employees');
|
||||||
|
$conn->executeUpdate('DELETE FROM issue5989_managers');
|
||||||
|
}
|
||||||
|
|
||||||
$this->_em->clear();
|
$this->_em->clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user