symfony doctrine2 将实体存储为 json
symfony doctrine2 store entity as json
我有一个具有多个属性的实体,这些属性可以组合在一起,对它的使用至关重要,我永远不必为它们编制索引。
我考虑过将它们单独存放 class,只是为了订单。
我想将此 class 的对象存储在 json 表示形式的文本列中。
我试过这样的事情:
class Market
{
/**
* @var Fee
* @ORM\Column(type="json")
*/
protected Fee $fee;
(...)
}
和费用 class:
class Fee implements Serializable
{
private float $taker;
private float $maker;
public function __construct(float $taker, float $maker)
{
$this->taker = $taker;
$this->maker = $maker;
}
/**
* @return float
*/
public function getTaker(): float
{
return $this->taker;
}
/**
* @return float
*/
public function getMaker(): float
{
return $this->maker;
}
public function serialize()
{
return json_encode(
[
'taker' => $this->getTaker(),
'maker' => $this->getMaker(),
]
);
}
public function unserialize($serialized)
{
$decoded = json_decode($serialized, true);
$this->taker = $decoded['taker'];
$this->maker = $decoded['maker'];
}
}
我希望在最后一栏“费用”中有这样的内容:
{
"taker": 0.0016,
"maker": 0.004
}
但我总是得到一个空 json {}
.
请告知如何做我打算做的事情。
我正在使用 Symfony 5.3.6 和 PHP 8.0.9
您使用了 JSON 字段类型,它需要一个数组而不是一个字符串。所以你不应该在设置之前序列化它。
您可以使用 object
type 代替:
class Market
{
/**
* @ORM\Column(type="object")
*/
protected Fee $fee;
}
(我也删除了 @var Fee
因为它是多余的)
我有一个具有多个属性的实体,这些属性可以组合在一起,对它的使用至关重要,我永远不必为它们编制索引。
我考虑过将它们单独存放 class,只是为了订单。
我想将此 class 的对象存储在 json 表示形式的文本列中。
我试过这样的事情:
class Market
{
/**
* @var Fee
* @ORM\Column(type="json")
*/
protected Fee $fee;
(...)
}
和费用 class:
class Fee implements Serializable
{
private float $taker;
private float $maker;
public function __construct(float $taker, float $maker)
{
$this->taker = $taker;
$this->maker = $maker;
}
/**
* @return float
*/
public function getTaker(): float
{
return $this->taker;
}
/**
* @return float
*/
public function getMaker(): float
{
return $this->maker;
}
public function serialize()
{
return json_encode(
[
'taker' => $this->getTaker(),
'maker' => $this->getMaker(),
]
);
}
public function unserialize($serialized)
{
$decoded = json_decode($serialized, true);
$this->taker = $decoded['taker'];
$this->maker = $decoded['maker'];
}
}
我希望在最后一栏“费用”中有这样的内容:
{
"taker": 0.0016,
"maker": 0.004
}
但我总是得到一个空 json {}
.
请告知如何做我打算做的事情。
我正在使用 Symfony 5.3.6 和 PHP 8.0.9
您使用了 JSON 字段类型,它需要一个数组而不是一个字符串。所以你不应该在设置之前序列化它。
您可以使用 object
type 代替:
class Market
{
/**
* @ORM\Column(type="object")
*/
protected Fee $fee;
}
(我也删除了 @var Fee
因为它是多余的)