mirror of
https://github.com/doctrine/orm.git
synced 2026-03-23 22:42:18 +01:00
SimpleObjectHydrator produces wrong values with inheritance table and simple array type #5229
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
@Ocramius commented on GitHub (Aug 24, 2016):
Seems like an issue with the array type, rather than with the ORM itself?
@w3sami commented on GitHub (Aug 24, 2016):
SimpleObjectHydrator is the file with the problem, type is ok imo. Same
issue is with eg json array type. Hydrator compares with type converted
version not raw value.
For me it makes sense that null is empty array for array type.
On Aug 24, 2016 8:23 PM, "Marco Pivetta" notifications@github.com wrote:
@w3sami commented on GitHub (Aug 29, 2016):
bumb! this is actually a quite serious bug, as it renders all our entities with joined inheritance + (json/)array type useless!!
@Ocramius commented on GitHub (Sep 7, 2016):
The fix in #6004 seems good, besides minor cleanup needed :-)
@Ocramius commented on GitHub (Sep 8, 2016):
Fixed in #6004, thanks @w3sami and @cvuorinen!