1

我有相关的实体我想序列化实体及其所有关系,序列化工作正常(我认为)例如,我保存了这个 json。

{  
  "relation_one":1,
  "relation_two":1,
  "relation_three":1,
  "other_integer_data":2996,
  "other_integer_data2":1174
}

后来我尝试反序列化,我只得到

{  
  "other_integer_data":2996,
  "other_integer_data2":1174
}

指示关系的属性未映射。反序列化后我需要做什么才能正确映射对象。

我的实体代码:

/**
 * @var RelationOne
 *
 * @ORM\ManyToOne(targetEntity="RelationOne", inversedBy="entity")
 * @ORM\JoinColumn(name="relation_one_id", referencedColumnName="id", nullable=true, onDelete="RESTRICT")
 * @Assert\NotBlank()
 * @Assert\Valid()
 */
private $relationOne;

/**
 * @var RelationTwo
 *
 * @ORM\ManyToOne(targetEntity="RelationTwo", inversedBy="entity")
 * @ORM\JoinColumn(name="relation_two_id", referencedColumnName="id", nullable=true, onDelete="RESTRICT")
 * @Assert\NotBlank()
 * @Assert\Valid()
 */
private $relationTwo;

/**
 * @var RelationThree
 *
 * @ORM\ManyToOne(targetEntity="RelationThree", inversedBy="entity")
 * @ORM\JoinColumn(name="relation_three_id", referencedColumnName="id", nullable=true, onDelete="RESTRICT")
 * @Assert\NotBlank()
 * @Assert\Valid()
 */
private $relationThree;



/**
 * @JMS\VirtualProperty
 * @JMS\SerializedName("relation_one")
 * @return integer
 */
public function getVirtualRelationOne()
{
    if ($this->relationOne) {
        return $this->relationOne->getId();
    }

    return null;
}

/**
 * @JMS\VirtualProperty
 * @JMS\SerializedName("relation_two")
 * @return integer
 */
public function getVirtualRelationTwo()
{
    if ($this->relationOne) {
        return $this->relationOne->getId();
    }

    return null;
}

/**
 * @JMS\VirtualProperty
 * @JMS\SerializedName("relation_three")
 * @return integer
 */
public function getVirtualRelationThree()
{
    if ($this->relationThree) {
        return $this->relationThree->getId();
    }

    return null;
}

编辑 经过一些测试,我发现这些关系 id 只是因为虚拟方法而设置的,没有它们它们不会被序列化,所以修改后的问题是如何正确序列化和反序列化具有关系的实体。

4

0 回答 0