【问题标题】:symfony doctrine2 store entity as jsonsymfony 学说2 将实体存储为 json
【发布时间】:2021-10-06 22:12:03
【问题描述】:

我有一个具有多个属性的实体,这些属性可以组合在一起,对于它的使用至关重要,我永远不必为它们编制索引。
我考虑将它们存储在单独的类中,只是为了订单。
我想将此类的对象存储在 json 表示形式的文本列中。
我尝试过这样的事情:

class Market
{
    /**
     * @var Fee
     * @ORM\Column(type="json")
     */
    protected Fee $fee;
(...)
}

和费用类:

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

【问题讨论】:

  • 我的回答对您有帮助吗?如果没有,请告诉我!

标签: symfony serialization doctrine-orm symfony5 php-8


【解决方案1】:

您使用了 JSON 字段类型,它需要一个数组而不是字符串。所以你不应该在设置之前对其进行序列化。

您可以改用object type

class Market
{
    /**
     * @ORM\Column(type="object")
     */
    protected Fee $fee;
}

(我也删除了@var Fee,因为它是多余的)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多