You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony MongoDB嵌入文档未传subData时存空数组而非不保存字段

问题:自继承EmbeddedDocument未传入subData时被存为空数组,期望不保存该字段

我有一个自继承的EmbeddedDocument文档类,功能运行正常,但当未传入subData时,它在Mongo中被保存为空数组(subData: [])。我期望未传入该字段时不保存它。已尝试设置nullable=false和nullable=true,不在构造函数中初始化ArrayCollection会触发错误Call to a member function add() on null。

使用的版本信息

  • Symfony 4.3
  • doctrine/mongodb 1.6.4
  • doctrine/mongodb-odm 1.3.7
  • doctrine/mongodb-odm-bundle 3.6.2

相关代码

<?php

namespace App\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;

/**
 * @MongoDB\EmbeddedDocument()
 */
class Data
{
    /**
     * @MongoDB\Id()
     */
    private $id;

    /**
     * @MongoDB\Field(type="string")
     */
    private $value;

    /**
     * @MongoDB\EmbedMany(targetDocument="App\Document\Data", nullable=false)
     */
    public $subData = null;

    public function __construct()
    {
        $this->subData = new ArrayCollection();
    }

    public function getId(): ?string
    {
        return $this->id;
    }

    public function getValue(): ?string
    {
        return $this->value;
    }

    public function setValue(string $value): self
    {
        $this->value = $value;

        return $this;
    }

    public function getSubData(): Collection
    {
        return $this->subData;
    }

    public function setSubData(array $subData): self
    {
        $this->subData = $subData;

        return $this;
    }

    public function addSubdata(Data $subData): self
    {
        $this->subData->add($subData);

        return $this;
    }
}

更新说明:按照@Maniax建议修改setter后问题仍未解决,subData仍被保存为[],修改后的setter代码:

public function setSubData(array $subData): self
{
    if(!empty($subData) && count($subData) > 0 && $subData !== null) {
        $this->subData = $subData;
    }

    return $this;
}

内容的提问来源于stack exchange,提问作者Pinks Not Dead

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:05:33