[DoctrineBridge][Form] Fix performance regression in EntityType
This commit is contained in:
parent
5b79649980
commit
64c80a6791
@ -146,7 +146,9 @@ class DoctrineChoiceLoader implements ChoiceLoaderInterface
|
|||||||
|
|
||||||
// Optimize performance in case we have an object loader and
|
// Optimize performance in case we have an object loader and
|
||||||
// a single-field identifier
|
// a single-field identifier
|
||||||
if (null === $value && !$this->choiceList && $this->objectLoader && $this->idReader->isSingleId()) {
|
$optimize = null === $value || is_array($value) && $value[0] === $this->idReader;
|
||||||
|
|
||||||
|
if ($optimize && !$this->choiceList && $this->objectLoader && $this->idReader->isSingleId()) {
|
||||||
$unorderedObjects = $this->objectLoader->getEntitiesByIds($this->idReader->getIdField(), $values);
|
$unorderedObjects = $this->objectLoader->getEntitiesByIds($this->idReader->getIdField(), $values);
|
||||||
$objectsById = array();
|
$objectsById = array();
|
||||||
$objects = array();
|
$objects = array();
|
||||||
|
@ -789,6 +789,30 @@ class EntityTypeTest extends TypeTestCase
|
|||||||
$this->assertSame('BooGroup/Bar', $field->getViewData());
|
$this->assertSame('BooGroup/Bar', $field->getViewData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testChoicesForValuesOptimization()
|
||||||
|
{
|
||||||
|
$entity1 = new SingleIntIdEntity(1, 'Foo');
|
||||||
|
$entity2 = new SingleIntIdEntity(2, 'Bar');
|
||||||
|
|
||||||
|
$this->persist(array($entity1, $entity2));
|
||||||
|
|
||||||
|
$field = $this->factory->createNamed('name', 'Symfony\Bridge\Doctrine\Form\Type\EntityType', null, array(
|
||||||
|
'em' => 'default',
|
||||||
|
'class' => self::SINGLE_IDENT_CLASS,
|
||||||
|
'choice_label' => 'name',
|
||||||
|
));
|
||||||
|
|
||||||
|
$this->em->clear();
|
||||||
|
|
||||||
|
$field->submit(1);
|
||||||
|
|
||||||
|
$unitOfWorkIdentityMap = $this->em->getUnitOfWork()->getIdentityMap();
|
||||||
|
$managedEntitiesNames = array_map('strval', $unitOfWorkIdentityMap['Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdEntity']);
|
||||||
|
|
||||||
|
$this->assertContains((string) $entity1, $managedEntitiesNames);
|
||||||
|
$this->assertNotContains((string) $entity2, $managedEntitiesNames);
|
||||||
|
}
|
||||||
|
|
||||||
public function testGroupByChoices()
|
public function testGroupByChoices()
|
||||||
{
|
{
|
||||||
$item1 = new GroupableEntity(1, 'Foo', 'Group1');
|
$item1 = new GroupableEntity(1, 'Foo', 'Group1');
|
||||||
|
Reference in New Issue
Block a user