CodeIgniter4 icon indicating copy to clipboard operation
CodeIgniter4 copied to clipboard

Bug: Entity::toRawArray incorrect work.

Open iRedds opened this issue 4 years ago • 1 comments

I believe that the behavior of Entity::toRawArray is not correct and not fully tested. For example, I'll take a test https://github.com/codeigniter4/CodeIgniter4/blob/4cbfe2cd25ff8b08eee323cc734a2113cead8eb1/tests/system/EntityTest.php#L773-L792

If the toRawArray() method is called with arguments $onlyChanged = true and $recursive = true Then the result of execution will be

[
    'entity' => []
]

instead of

[
    'entity' => [
 	'foo'        => null, 
 	'bar'        => null, 
 	'default'    => 'sumfin', 
 	'created_at' => null, 
   ]
]

iRedds avatar Feb 27 '21 07:02 iRedds

I can confirm this is bug. When I initially added the $recursive parameter I did not take into consideration that hasChanged method have to be updated as well.

We need deffiniton on how this is supposed to work.

If there is a single change inside entity object. ToRawArray() method on the inner entity might have to be called with $onlyChanged = false

Most of NoSQL are going to replace the complete value with the new object instead of updating just modified values. There are means of updating the nested values but those differ a lot per DB.

So I'd go with toRawArray doing replace of complete inner object. If there is a need for implementing the update on the inner model those can always be handled in the Model by doing non recursive toRawArray() and manually handling the inner entities.

I can go ahead and start working on fixing this one.

najdanovicivan avatar Feb 28 '21 21:02 najdanovicivan