php - symfony2 JMSSerializerBundle deserialize entity with OneToMany association -


i have category onetomany post association in doctrine2 setup this:

category:

... /**  * @orm\onetomany(targetentity="post", mappedby="category")  * @type("arraycollection<platform\blogbundle\entity\post>")  */ protected $posts; ... 

post:

... /**  * @orm\manytoone(targetentity="category", inversedby="posts")  * @orm\joincolumn(name="category_id", referencedcolumnname="id")  * @type("platform\blogbundle\entity\category")  */ protected $category; ... 

i trying deserialize following json object (both entities id of 1 exist in database)

{     "id":1,     "title":"category 1",     "posts":[         {             "id":1         }     ] } 

using jmsserializerbundle serializer's deserialize method configured doctrine object constructor

jms_serializer.object_constructor:     alias: jms_serializer.doctrine_object_constructor     public: false 

with following result:

platform\blogbundle\entity\category {#2309   #id: 1   #title: "category 1"   #posts: doctrine\common\collections\arraycollection {#2314     -elements: array:1 [       0 => platform\blogbundle\entity\post {#2524         #id: 1         #title: "post 1"         #content: "post 1 content"         #category: null       }     ]   } } 

which fine @ first sight. problem is, associated post has category field set null, resulting in no association on persist(). if try deserialize this:

{     "id":1,     "title":"category 1",     "posts":[         {             "id":1             "category": {                 "id":1             }         }     ] } 

it works fine not want :( suspect solution somehow reverse order in entities saved. if post saved first , category second, should work.

how save association properly?

don't know whether still relevant solution pretty straight.

you should configure accessor setter association, e.g.:

/**  * @orm\onetomany(targetentity="post", mappedby="category")  * @type("arraycollection<platform\blogbundle\entity\post>")  * @accessor(setter="setposts")  */ protected $posts; 

the serializer call setter method populate posts json. rest of logic should handled inside setposts:

public function setposts($posts = null) {     $posts = is_array($posts) ? new arraycollection($posts) : $posts;     // post owning side of association should ensure     // category nullified if it's not longer in collection     foreach ($this->posts $post) {         if (is_null($posts) || !$posts->contains($post) {             $post->setcategory(null);         }     }     // need fix null inside post.category association     if (!is_null($posts)) {         foreach ($posts $post) {             $post->setcategory($this);         }     }      $this->posts = $posts; } 

Comments

Popular posts from this blog

php - failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request -

java - How to filter a backspace keyboard input -

java - Show Soft Keyboard when EditText Appears -