dunglas / doctrine-json-odm

An object document mapper for Doctrine ORM using JSON types of modern RDBMS.
https://dunglas.fr
MIT License
580 stars 64 forks source link

"Cannot use object of type X as array" exception #40

Closed marcinmateuszwisniewski closed 5 years ago

marcinmateuszwisniewski commented 6 years ago

Hi, I had used for some time your bundle. Today I came with strange bug.

I make a system for creating a pen and paper RPG character sheet, i save a character as a JSON object. When I readit from base, I get exception like in title. BaseCharacter is the object kept in database (Postgres, actually), Kawalkator is an character profession (a nested object).

It worked before nicely, butwhat I changed lately was only some PHPDoc and Type-Hints and i think that I didnt change anything more in these or other PHP classes.

What could happen?

Symfony\Component\Debug\Exception\FatalThrowableError:
Cannot use object of type AppBundle\CharacterClasses\Kawalkator as array

  at vendor\dunglas\doctrine-json-odm\src\Normalizer\ObjectNormalizer.php:63
  at Dunglas\DoctrineJsonOdm\Normalizer\ObjectNormalizer->denormalize(object(Kawalkator), 'AppBundle\\CharacterClasses\\CharacterProffesion', 'json', array('cache_key' => '6de9eb2685609b8387658584987a05b0'))
     (vendor\symfony\symfony\src\Symfony\Component\Serializer\Serializer.php:292)
  at Symfony\Component\Serializer\Serializer->denormalizeObject(object(Kawalkator), 'AppBundle\\CharacterClasses\\CharacterProffesion', 'json', array('cache_key' => '6de9eb2685609b8387658584987a05b0'))
     (vendor\symfony\symfony\src\Symfony\Component\Serializer\Serializer.php:174)
  at Symfony\Component\Serializer\Serializer->denormalize(object(Kawalkator), 'AppBundle\\CharacterClasses\\CharacterProffesion', 'json', array('cache_key' => '6de9eb2685609b8387658584987a05b0'))
     (vendor\symfony\symfony\src\Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer.php:269)
  at Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->validateAndDenormalize('AppBundle\\CharacterClasses\\BaseCharacter', 'profession', object(Kawalkator), 'json', array('cache_key' => '6de9eb2685609b8387658584987a05b0'))
     (vendor\symfony\symfony\src\Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer.php:196)
  at Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->denormalize(array('alternatives' => true, 'defaultMixedPoints' => 5, 'freePoints' => 0, 'name' => 'name', 'surname' => 'surname', 'coatOfArmsPicture' => 'coat.jpg', 'coatOfArms' => 'surname', 'call' => 'call', 'portrait' => 'image.jpg', 'origin' => object(LithuaniaOrigin), 'confession' => null, 'age' => 'YOUNG', 'socialStrata' => null, 'sorceryBelief' => null, 'piety' => null, 'honour' => null, 'courage' => null, 'amorousness' => null, 'rightousness' => null, 'profession' => object(Kawalkator), 'characterType' => null, 'fortunePoints' => null, 'freeSkillPoints' => 12, 'freeAttributePoints' => 12, 'defaultSkillPoints' => 12, 'defaultAttributePoints' => 12, 'mixedPoints' => 5, 'addedAttributePoints' => array(0, 0, 0, 0, 0, 0), 'ownedPerks' => array(), 'ownedSkills' => array()), 'AppBundle\\CharacterClasses\\BaseCharacter', 'json', array('cache_key' => '6de9eb2685609b8387658584987a05b0'))
     (vendor\dunglas\doctrine-json-odm\src\Normalizer\ObjectNormalizer.php:68)
  at Dunglas\DoctrineJsonOdm\Normalizer\ObjectNormalizer->denormalize(array('alternatives' => true, 'defaultMixedPoints' => 5, 'freePoints' => 0, 'name' => 'name', 'surname' => 'surname', 'coatOfArmsPicture' => 'coat.jpg', 'coatOfArms' => 'surname', 'call' => 'call', 'portrait' => 'image.jpg', 'origin' => object(LithuaniaOrigin), 'confession' => null, 'age' => 'YOUNG', 'socialStrata' => null, 'sorceryBelief' => null, 'piety' => null, 'honour' => null, 'courage' => null, 'amorousness' => null, 'rightousness' => null, 'profession' => object(Kawalkator), 'characterType' => null, 'fortunePoints' => null, 'freeSkillPoints' => 12, 'freeAttributePoints' => 12, 'defaultSkillPoints' => 12, 'defaultAttributePoints' => 12, 'mixedPoints' => 5, 'addedAttributePoints' => array(0, 0, 0, 0, 0, 0), 'ownedPerks' => array(), 'ownedSkills' => array()), '', 'json', array())
     (vendor\symfony\symfony\src\Symfony\Component\Serializer\Serializer.php:292)
  at Symfony\Component\Serializer\Serializer->denormalizeObject(array('#type' => 'AppBundle\\CharacterClasses\\BaseCharacter', 'alternatives' => true, 'defaultMixedPoints' => 5, 'freePoints' => 0, 'name' => 'name', 'surname' => 'surname', 'coatOfArmsPicture' => 'coat.jpg', 'coatOfArms' => 'surname', 'call' => 'call', 'portrait' => 'image.jpg', 'origin' => array('#type' => 'AppBundle\\CharacterClasses\\LithuaniaOrigin', 'originSkill' => array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łowiectwo', 'description' => 'Opis łowiectwa', 'value' => 2, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'HUNT')), 'name' => 'Litwa', 'description' => 'Z Wielkiego Księstwa. Łeb +2, Łowiectwo + 2 lub Tropienie +1', 'attributes' => array(0, 0, 0, 0, 0, 2), 'alternativeSkills' => array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łowiectwo', 'description' => 'Opis łowiectwa', 'value' => 2, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'HUNT'))), 'confession' => null, 'age' => 'YOUNG', 'socialStrata' => null, 'sorceryBelief' => null, 'piety' => null, 'honour' => null, 'courage' => null, 'amorousness' => null, 'rightousness' => null, 'profession' => array('#type' => 'AppBundle\\CharacterClasses\\Kawalkator', 'defaultType' => 0, 'description' => null, 'alternativePerks' => array(array('#type' => 'AppBundle\\CharacterClasses\\BasePerk', 'name' => 'Ostroznosc', 'description' => 'Opis ostroznosci', 'cost' => '-3', 'code' => 'CAUTION')), 'alternativeSkills' => array(array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łacina', 'description' => 'Język łaciński', 'value' => 1, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'LATIN'))), 'attributes' => array(3, 4, 5, 6, 7, 8), 'classSkills' => array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łacina', 'description' => 'Język łaciński', 'value' => 1, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'LATIN')), 'selectedSkills' => array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łacina', 'description' => 'Język łaciński', 'value' => 1, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'LATIN')), 'selectedPerk' => array(array('#type' => 'AppBundle\\CharacterClasses\\BasePerk', 'name' => 'Ostroznosc', 'description' => 'Opis ostroznosci', 'cost' => '-3', 'code' => 'CAUTION')), 'name' => 'Kawalkator', 'defaultFreePoints' => 0, 'defaultMixedPoints' => 5, 'defaultSkills' => array(), 'defaultPerks' => array()), 'characterType' => null, 'fortunePoints' => null, 'freeSkillPoints' => 12, 'freeAttributePoints' => 12, 'defaultSkillPoints' => 12, 'defaultAttributePoints' => 12, 'mixedPoints' => 5, 'addedAttributePoints' => array(0, 0, 0, 0, 0, 0), 'ownedPerks' => array(), 'ownedSkills' => array()), '', 'json', array())
     (vendor\symfony\symfony\src\Symfony\Component\Serializer\Serializer.php:174)
  at Symfony\Component\Serializer\Serializer->denormalize(array('#type' => 'AppBundle\\CharacterClasses\\BaseCharacter', 'alternatives' => true, 'defaultMixedPoints' => 5, 'freePoints' => 0, 'name' => 'name', 'surname' => 'surname', 'coatOfArmsPicture' => 'coat.jpg', 'coatOfArms' => 'surname', 'call' => 'call', 'portrait' => 'image.jpg', 'origin' => array('#type' => 'AppBundle\\CharacterClasses\\LithuaniaOrigin', 'originSkill' => array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łowiectwo', 'description' => 'Opis łowiectwa', 'value' => 2, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'HUNT')), 'name' => 'Litwa', 'description' => 'Z Wielkiego Księstwa. Łeb +2, Łowiectwo + 2 lub Tropienie +1', 'attributes' => array(0, 0, 0, 0, 0, 2), 'alternativeSkills' => array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łowiectwo', 'description' => 'Opis łowiectwa', 'value' => 2, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'HUNT'))), 'confession' => null, 'age' => 'YOUNG', 'socialStrata' => null, 'sorceryBelief' => null, 'piety' => null, 'honour' => null, 'courage' => null, 'amorousness' => null, 'rightousness' => null, 'profession' => array('#type' => 'AppBundle\\CharacterClasses\\Kawalkator', 'defaultType' => 0, 'description' => null, 'alternativePerks' => array(array('#type' => 'AppBundle\\CharacterClasses\\BasePerk', 'name' => 'Ostroznosc', 'description' => 'Opis ostroznosci', 'cost' => '-3', 'code' => 'CAUTION')), 'alternativeSkills' => array(array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łacina', 'description' => 'Język łaciński', 'value' => 1, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'LATIN'))), 'attributes' => array(3, 4, 5, 6, 7, 8), 'classSkills' => array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łacina', 'description' => 'Język łaciński', 'value' => 1, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'LATIN')), 'selectedSkills' => array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łacina', 'description' => 'Język łaciński', 'value' => 1, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'LATIN')), 'selectedPerk' => array(array('#type' => 'AppBundle\\CharacterClasses\\BasePerk', 'name' => 'Ostroznosc', 'description' => 'Opis ostroznosci', 'cost' => '-3', 'code' => 'CAUTION')), 'name' => 'Kawalkator', 'defaultFreePoints' => 0, 'defaultMixedPoints' => 5, 'defaultSkills' => array(), 'defaultPerks' => array()), 'characterType' => null, 'fortunePoints' => null, 'freeSkillPoints' => 12, 'freeAttributePoints' => 12, 'defaultSkillPoints' => 12, 'defaultAttributePoints' => 12, 'mixedPoints' => 5, 'addedAttributePoints' => array(0, 0, 0, 0, 0, 0), 'ownedPerks' => array(), 'ownedSkills' => array()), '', 'json', array())
     (vendor\symfony\symfony\src\Symfony\Component\Serializer\Serializer.php:132)
  at Symfony\Component\Serializer\Serializer->deserialize(array('#type' => 'AppBundle\\CharacterClasses\\BaseCharacter', 'alternatives' => true, 'defaultMixedPoints' => 5, 'freePoints' => 0, 'name' => 'name', 'surname' => 'surname', 'coatOfArmsPicture' => 'coat.jpg', 'coatOfArms' => 'surname', 'call' => 'call', 'portrait' => 'image.jpg', 'origin' => array('#type' => 'AppBundle\\CharacterClasses\\LithuaniaOrigin', 'originSkill' => array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łowiectwo', 'description' => 'Opis łowiectwa', 'value' => 2, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'HUNT')), 'name' => 'Litwa', 'description' => 'Z Wielkiego Księstwa. Łeb +2, Łowiectwo + 2 lub Tropienie +1', 'attributes' => array(0, 0, 0, 0, 0, 2), 'alternativeSkills' => array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łowiectwo', 'description' => 'Opis łowiectwa', 'value' => 2, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'HUNT'))), 'confession' => null, 'age' => 'YOUNG', 'socialStrata' => null, 'sorceryBelief' => null, 'piety' => null, 'honour' => null, 'courage' => null, 'amorousness' => null, 'rightousness' => null, 'profession' => array('#type' => 'AppBundle\\CharacterClasses\\Kawalkator', 'defaultType' => 0, 'description' => null, 'alternativePerks' => array(array('#type' => 'AppBundle\\CharacterClasses\\BasePerk', 'name' => 'Ostroznosc', 'description' => 'Opis ostroznosci', 'cost' => '-3', 'code' => 'CAUTION')), 'alternativeSkills' => array(array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łacina', 'description' => 'Język łaciński', 'value' => 1, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'LATIN'))), 'attributes' => array(3, 4, 5, 6, 7, 8), 'classSkills' => array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łacina', 'description' => 'Język łaciński', 'value' => 1, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'LATIN')), 'selectedSkills' => array(array('#type' => 'AppBundle\\CharacterClasses\\BaseSkill', 'name' => 'Łacina', 'description' => 'Język łaciński', 'value' => 1, 'assocAttribute' => 3, 'isCommon' => true, 'code' => 'LATIN')), 'selectedPerk' => array(array('#type' => 'AppBundle\\CharacterClasses\\BasePerk', 'name' => 'Ostroznosc', 'description' => 'Opis ostroznosci', 'cost' => '-3', 'code' => 'CAUTION')), 'name' => 'Kawalkator', 'defaultFreePoints' => 0, 'defaultMixedPoints' => 5, 'defaultSkills' => array(), 'defaultPerks' => array()), 'characterType' => null, 'fortunePoints' => null, 'freeSkillPoints' => 12, 'freeAttributePoints' => 12, 'defaultSkillPoints' => 12, 'defaultAttributePoints' => 12, 'mixedPoints' => 5, 'addedAttributePoints' => array(0, 0, 0, 0, 0, 0), 'ownedPerks' => array(), 'ownedSkills' => array()), '', 'json', array())
     (vendor\dunglas\doctrine-json-odm\src\Type\JsonDocumentType.php:116)
  at Dunglas\DoctrineJsonOdm\Type\JsonDocumentType->convertToPHPValue('{"#type":"AppBundle\\\\CharacterClasses\\\\BaseCharacter","alternatives":true,"defaultMixedPoints":5,"freePoints":0,"name":"name","surname":"surname","coatOfArmsPicture":"coat.jpg","coatOfArms":"surname","call":"call","portrait":"image.jpg","origin":{"#type":"AppBundle\\\\CharacterClasses\\\\LithuaniaOrigin","originSkill":[{"#type":"AppBundle\\\\CharacterClasses\\\\BaseSkill","name":"\\u0141owiectwo","description":"Opis \\u0142owiectwa","value":2,"assocAttribute":3,"isCommon":true,"code":"HUNT"}],"name":"Litwa","description":"Z Wielkiego Ksi\\u0119stwa. \\u0141eb +2, \\u0141owiectwo + 2 lub Tropienie +1","attributes":[0,0,0,0,0,2],"alternativeSkills":[{"#type":"AppBundle\\\\CharacterClasses\\\\BaseSkill","name":"\\u0141owiectwo","description":"Opis \\u0142owiectwa","value":2,"assocAttribute":3,"isCommon":true,"code":"HUNT"}]},"confession":null,"age":"YOUNG","socialStrata":null,"sorceryBelief":null,"piety":null,"honour":null,"courage":null,"amorousness":null,"rightousness":null,"profession":{"#type":"AppBundle\\\\CharacterClasses\\\\Kawalkator","defaultType":0,"description":null,"alternativePerks":[{"#type":"AppBundle\\\\CharacterClasses\\\\BasePerk","name":"Ostroznosc","description":"Opis ostroznosci","cost":"-3","code":"CAUTION"}],"alternativeSkills":[[{"#type":"AppBundle\\\\CharacterClasses\\\\BaseSkill","name":"\\u0141acina","description":"J\\u0119zyk \\u0142aci\\u0144ski","value":1,"assocAttribute":3,"isCommon":true,"code":"LATIN"}]],"attributes":[3,4,5,6,7,8],"classSkills":[{"#type":"AppBundle\\\\CharacterClasses\\\\BaseSkill","name":"\\u0141acina","description":"J\\u0119zyk \\u0142aci\\u0144ski","value":1,"assocAttribute":3,"isCommon":true,"code":"LATIN"}],"selectedSkills":[{"#type":"AppBundle\\\\CharacterClasses\\\\BaseSkill","name":"\\u0141acina","description":"J\\u0119zyk \\u0142aci\\u0144ski","value":1,"assocAttribute":3,"isCommon":true,"code":"LATIN"}],"selectedPerk":[{"#type":"AppBundle\\\\CharacterClasses\\\\BasePerk","name":"Ostroznosc","description":"Opis ostroznosci","cost":"-3","code":"CAUTION"}],"name":"Kawalkator","defaultFreePoints":0,"defaultMixedPoints":5,"defaultSkills":[],"defaultPerks":[]},"characterType":null,"fortunePoints":null,"freeSkillPoints":12,"freeAttributePoints":12,"defaultSkillPoints":12,"defaultAttributePoints":12,"mixedPoints":5,"addedAttributePoints":[0,0,0,0,0,0],"ownedPerks":[],"ownedSkills":[]}', object(PostgreSQL92Platform))
     (vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator.php:131)
  at Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator->hydrateRowData(array('id_1' => 107, 'chardata_2' => '{"#type":"AppBundle\\\\CharacterClasses\\\\BaseCharacter","alternatives":true,"defaultMixedPoints":5,"freePoints":0,"name":"name","surname":"surname","coatOfArmsPicture":"coat.jpg","coatOfArms":"surname","call":"call","portrait":"image.jpg","origin":{"#type":"AppBundle\\\\CharacterClasses\\\\LithuaniaOrigin","originSkill":[{"#type":"AppBundle\\\\CharacterClasses\\\\BaseSkill","name":"\\u0141owiectwo","description":"Opis \\u0142owiectwa","value":2,"assocAttribute":3,"isCommon":true,"code":"HUNT"}],"name":"Litwa","description":"Z Wielkiego Ksi\\u0119stwa. \\u0141eb +2, \\u0141owiectwo + 2 lub Tropienie +1","attributes":[0,0,0,0,0,2],"alternativeSkills":[{"#type":"AppBundle\\\\CharacterClasses\\\\BaseSkill","name":"\\u0141owiectwo","description":"Opis \\u0142owiectwa","value":2,"assocAttribute":3,"isCommon":true,"code":"HUNT"}]},"confession":null,"age":"YOUNG","socialStrata":null,"sorceryBelief":null,"piety":null,"honour":null,"courage":null,"amorousness":null,"rightousness":null,"profession":{"#type":"AppBundle\\\\CharacterClasses\\\\Kawalkator","defaultType":0,"description":null,"alternativePerks":[{"#type":"AppBundle\\\\CharacterClasses\\\\BasePerk","name":"Ostroznosc","description":"Opis ostroznosci","cost":"-3","code":"CAUTION"}],"alternativeSkills":[[{"#type":"AppBundle\\\\CharacterClasses\\\\BaseSkill","name":"\\u0141acina","description":"J\\u0119zyk \\u0142aci\\u0144ski","value":1,"assocAttribute":3,"isCommon":true,"code":"LATIN"}]],"attributes":[3,4,5,6,7,8],"classSkills":[{"#type":"AppBundle\\\\CharacterClasses\\\\BaseSkill","name":"\\u0141acina","description":"J\\u0119zyk \\u0142aci\\u0144ski","value":1,"assocAttribute":3,"isCommon":true,"code":"LATIN"}],"selectedSkills":[{"#type":"AppBundle\\\\CharacterClasses\\\\BaseSkill","name":"\\u0141acina","description":"J\\u0119zyk \\u0142aci\\u0144ski","value":1,"assocAttribute":3,"isCommon":true,"code":"LATIN"}],"selectedPerk":[{"#type":"AppBundle\\\\CharacterClasses\\\\BasePerk","name":"Ostroznosc","description":"Opis ostroznosci","cost":"-3","code":"CAUTION"}],"name":"Kawalkator","defaultFreePoints":0,"defaultMixedPoints":5,"defaultSkills":[],"defaultPerks":[]},"characterType":null,"fortunePoints":null,"freeSkillPoints":12,"freeAttributePoints":12,"defaultSkillPoints":12,"defaultAttributePoints":12,"mixedPoints":5,"addedAttributePoints":[0,0,0,0,0,0],"ownedPerks":[],"ownedSkills":[]}', 'user_id_3' => null), array())
     (vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator.php:69)
  at Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator->hydrateAllData()
     (vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\AbstractHydrator.php:150)
  at Doctrine\ORM\Internal\Hydration\AbstractHydrator->hydrateAll(object(PDOStatement), object(ResultSetMapping), array())
     (vendor\doctrine\orm\lib\Doctrine\ORM\Persisters\Entity\BasicEntityPersister.php:720)
  at Doctrine\ORM\Persisters\Entity\BasicEntityPersister->load(array('id' => 107), null, null, array(), null, 1, null)
     (vendor\doctrine\orm\lib\Doctrine\ORM\EntityRepository.php:196)
  at Doctrine\ORM\EntityRepository->findOneBy(array('id' => 107))
     (src\AppBundle\Controller\DPController.php:326)
  at AppBundle\Controller\DPController->attributeAction(object(Request))
  at call_user_func_array(array(object(DPController), 'attributeAction'), array(object(Request)))
     (vendor\symfony\symfony\src\Symfony\Component\HttpKernel\HttpKernel.php:153)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor\symfony\symfony\src\Symfony\Component\HttpKernel\HttpKernel.php:68)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor\symfony\symfony\src\Symfony\Component\HttpKernel\Kernel.php:169)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (web\app_dev.php:29)
  at require('C:\\Users\\MARCWISN\\DP\\dzikiePola\\web\\app_dev.php')
     (vendor\symfony\symfony\src\Symfony\Bundle\WebServerBundle\Resources\router.php:42)
Toflar commented 5 years ago

Is this issue still relevant?