1
0
mirror of synced 2025-02-02 13:31:45 +03:00

Remove loose comparison on discriminator values

According to mapping drivers the discriminator values can always be
converted to strings so it's safe to assume that we can actually do a
strict comparison during hydration.
This commit is contained in:
Luís Cobucci 2018-02-18 09:49:41 +01:00
parent 48ca6dbcec
commit 2905b435db
No known key found for this signature in database
GPG Key ID: EC61C5F01750ED3C

View File

@ -299,8 +299,7 @@ abstract class AbstractHydrator
// If there are field name collisions in the child class, then we need
// to only hydrate if we are looking at the correct discriminator value
if (isset($cacheKeyInfo['discriminatorColumn'], $data[$cacheKeyInfo['discriminatorColumn']])
// Note: loose comparison required. See https://github.com/doctrine/doctrine2/pull/6304#issuecomment-323294442
&& ! in_array($data[$cacheKeyInfo['discriminatorColumn']], $cacheKeyInfo['discriminatorValues'])
&& ! in_array((string) $data[$cacheKeyInfo['discriminatorColumn']], $cacheKeyInfo['discriminatorValues'], true)
) {
break;
}
@ -398,13 +397,13 @@ abstract class AbstractHydrator
// should there be field name collisions
if ($classMetadata->parentClasses && isset($this->_rsm->discriminatorColumns[$ownerMap])) {
$discriminatorValues = array_map(
function (string $subClass) {
return $this->getClassMetadata($subClass)->discriminatorValue;
function (string $subClass) : string {
return (string) $this->getClassMetadata($subClass)->discriminatorValue;
},
$classMetadata->subClasses
);
$discriminatorValues[] = $classMetadata->discriminatorValue;
$discriminatorValues[] = (string) $classMetadata->discriminatorValue;
return $this->_cache[$key] = \array_merge(
$columnInfo,