Php 如何使用可嵌入json列的原则?
在我的Symfony项目中,我有一个包含嵌套对象的条令实体。如以下示例所示: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") *
/**
* @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是必要的,那么上述方法可能是最好的解决方法