mirror of
https://github.com/doctrine/orm.git
synced 2026-03-24 06:52:09 +01:00
SimpleObjectHydrator produces wrong values with inheritance table and simple array type #5228
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @w3sami on GitHub (Aug 24, 2016).
Originally assigned to: @Ocramius on GitHub.
I am getting empty array instead of array with some values, since SimpleObjectHydrator converts the value with convertToPHPValue
line 129 $value = $type->convertToPHPValue($value, $this->_platform);
this doesent play well with the null check below
line 134:
// Prevent overwrite in case of inherit classes using same property name (See AbstractHydrator)
if ( ! isset($data[$fieldName]) || $value !== null) {
$data[$fieldName] = $value;
}
since arrayType->convertToPHPValue returns [] when null, resulting in a leak from the wrong left joined table.
solution is easy, dont use the converted value in the if, but instead a raw value.
eg line 125 + $rawValue = $value;
and
136: if ( ! isset($data[$fieldName]) || $rawValue !== null) {
sorry I don't have time to write a pr with tests