Php 如何使用可嵌入json列的原则?

Php 如何使用可嵌入json列的原则?,php,postgresql,symfony,doctrine-orm,doctrine,Php,Postgresql,Symfony,Doctrine Orm,Doctrine,在我的Symfony项目中,我有一个包含嵌套对象的条令实体。如以下示例所示: /** * @ORM\Entity(repositoryClass="App\Repository\EntityRepository") */ class Enity { /** * @ORM\Id() * * @var int */ private $id; /** * @ORM\Column(type="json") *

在我的Symfony项目中,我有一个包含嵌套对象的条令实体。如以下示例所示:

/**
 * @ORM\Entity(repositoryClass="App\Repository\EntityRepository")
 */
class Enity
{
    /**
     * @ORM\Id()
     *
     * @var int
     */
    private $id;

    /**
     * @ORM\Column(type="json")
     *
     * @var NestedObject
     */
    private $nestedObject;

    public function getNestedObject(): NestedObject
    {
        return $this->nestedObject;
    }

    public function setNestedObject(NestedObject $object): void
    {
        $this->nestedObject = $object;
    }
}   
和嵌套对象:

class NestedObject
{
    /**
     * @var FirstOption
     */
    private $firstOption;

    /**
     * @var SecondOption
     */
    private $secondOption;

    /**
     * @return FirstOption
     */
    public function getFirstOption(): FirstOption
    {
        return $this->firstOption;
    }

    /**
     * @return SecondOption
     */
    public function getSecondOption(): SecondOption
    {
        return $this->secondOption;
    }
}
我想在Postgres中以jsonb的形式存储嵌套对象,以便在保存时自动序列化该对象,并在从数据库获取时反序列化该对象。
我已经阅读了条令文档,但没有找到关于json和可嵌入对象的内容


有没有办法将可嵌入对象存储为json结构,而不为任何属性创建额外的列?或者方便使用嵌套json对象的任何替代方法?

不幸的是,在php中用json序列化并不是那么容易,您可以实现
\JsonSerializable
接口,但它只适用于
json\u encode
,如果您想在getter中反序列化对象,您需要自己创建对象:

public function getNestedObject(): NestedObject
{
    $json = $this->nestedObject;
    $nestedObject = new NestedObject();
    $nestedObject->setX($json['x']);
    ... // rest of setters
    return $nestedObject;
}
若不需要JSON,那个么创建到嵌套对象的关系或者使用序列化接口将更容易,而且可能更好。如果json是必要的,那么上述方法可能是最好的解决方法