[DoctrineBridge] Take into account that indexBy="person_id" could be a db column name, for a referenced entity
This commit is contained in:
parent
d23b74ebce
commit
472eab11e9
@ -122,7 +122,12 @@ class DoctrineExtractor implements PropertyListExtractorInterface, PropertyTypeE
|
|||||||
/** @var ClassMetadataInfo $subMetadata */
|
/** @var ClassMetadataInfo $subMetadata */
|
||||||
$indexProperty = $subMetadata->getSingleAssociationReferencedJoinColumnName($fieldName);
|
$indexProperty = $subMetadata->getSingleAssociationReferencedJoinColumnName($fieldName);
|
||||||
$subMetadata = $this->entityManager ? $this->entityManager->getClassMetadata($associationMapping['targetEntity']) : $this->classMetadataFactory->getMetadataFor($associationMapping['targetEntity']);
|
$subMetadata = $this->entityManager ? $this->entityManager->getClassMetadata($associationMapping['targetEntity']) : $this->classMetadataFactory->getMetadataFor($associationMapping['targetEntity']);
|
||||||
$typeOfField = $subMetadata->getTypeOfField($indexProperty);
|
|
||||||
|
//Not a property, maybe a column name?
|
||||||
|
if (null === ($typeOfField = $subMetadata->getTypeOfField($indexProperty))) {
|
||||||
|
$fieldName = $subMetadata->getFieldForColumn($indexProperty);
|
||||||
|
$typeOfField = $subMetadata->getTypeOfField($fieldName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,6 +85,7 @@ class DoctrineExtractorTest extends TestCase
|
|||||||
'indexedByDt',
|
'indexedByDt',
|
||||||
'indexedByCustomType',
|
'indexedByCustomType',
|
||||||
'indexedBuz',
|
'indexedBuz',
|
||||||
|
'dummyGeneratedValueList',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
@ -245,6 +246,15 @@ class DoctrineExtractorTest extends TestCase
|
|||||||
new Type(Type::BUILTIN_TYPE_STRING),
|
new Type(Type::BUILTIN_TYPE_STRING),
|
||||||
new Type(Type::BUILTIN_TYPE_OBJECT, false, DoctrineRelation::class)
|
new Type(Type::BUILTIN_TYPE_OBJECT, false, DoctrineRelation::class)
|
||||||
)]],
|
)]],
|
||||||
|
['dummyGeneratedValueList', [new Type(
|
||||||
|
Type::BUILTIN_TYPE_OBJECT,
|
||||||
|
false,
|
||||||
|
'Doctrine\Common\Collections\Collection',
|
||||||
|
true,
|
||||||
|
new Type(Type::BUILTIN_TYPE_INT),
|
||||||
|
new Type(Type::BUILTIN_TYPE_OBJECT, false, DoctrineRelation::class)
|
||||||
|
)]],
|
||||||
|
['json', null],
|
||||||
];
|
];
|
||||||
|
|
||||||
if (class_exists(Types::class)) {
|
if (class_exists(Types::class)) {
|
||||||
|
@ -137,4 +137,9 @@ class DoctrineDummy
|
|||||||
* @OneToMany(targetEntity="DoctrineRelation", mappedBy="buzField", indexBy="buzField")
|
* @OneToMany(targetEntity="DoctrineRelation", mappedBy="buzField", indexBy="buzField")
|
||||||
*/
|
*/
|
||||||
protected $indexedBuz;
|
protected $indexedBuz;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OneToMany(targetEntity="DoctrineRelation", mappedBy="dummyRelation", indexBy="gen_value_col_id", orphanRemoval=true)
|
||||||
|
*/
|
||||||
|
protected $dummyGeneratedValueList;
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ use Doctrine\ORM\Mapping\Column;
|
|||||||
use Doctrine\ORM\Mapping\Entity;
|
use Doctrine\ORM\Mapping\Entity;
|
||||||
use Doctrine\ORM\Mapping\GeneratedValue;
|
use Doctrine\ORM\Mapping\GeneratedValue;
|
||||||
use Doctrine\ORM\Mapping\Id;
|
use Doctrine\ORM\Mapping\Id;
|
||||||
|
use Doctrine\ORM\Mapping\OneToMany;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Kévin Dunglas <dunglas@gmail.com>
|
* @author Kévin Dunglas <dunglas@gmail.com>
|
||||||
@ -34,4 +35,15 @@ class DoctrineGeneratedValue
|
|||||||
* @Column
|
* @Column
|
||||||
*/
|
*/
|
||||||
public $foo;
|
public $foo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
* @Column(type="integer", name="gen_value_col_id")
|
||||||
|
*/
|
||||||
|
public $valueId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @OneToMany(targetEntity="DoctrineRelation", mappedBy="generatedValueRelation", indexBy="rguid_column", orphanRemoval=true)
|
||||||
|
*/
|
||||||
|
protected $relationList;
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ use Doctrine\ORM\Mapping\Column;
|
|||||||
use Doctrine\ORM\Mapping\Entity;
|
use Doctrine\ORM\Mapping\Entity;
|
||||||
use Doctrine\ORM\Mapping\Id;
|
use Doctrine\ORM\Mapping\Id;
|
||||||
use Doctrine\ORM\Mapping\ManyToOne;
|
use Doctrine\ORM\Mapping\ManyToOne;
|
||||||
|
use Doctrine\ORM\Mapping\JoinColumn;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Entity
|
* @Entity
|
||||||
@ -60,4 +61,15 @@ class DoctrineRelation
|
|||||||
* @ManyToOne(targetEntity="DoctrineDummy", inversedBy="indexedBuz")
|
* @ManyToOne(targetEntity="DoctrineDummy", inversedBy="indexedBuz")
|
||||||
*/
|
*/
|
||||||
protected $buzField;
|
protected $buzField;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ManyToOne(targetEntity="DoctrineDummy", inversedBy="dummyGeneratedValueList")
|
||||||
|
*/
|
||||||
|
private $dummyRelation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ManyToOne(targetEntity="DoctrineGeneratedValue", inversedBy="relationList")
|
||||||
|
* @JoinColumn(name="gen_value_col_id", referencedColumnName="gen_value_col_id")
|
||||||
|
*/
|
||||||
|
private $generatedValueRelation;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user