繁体   English   中英

在Symfony 2 / Doctrine 2中使用MappedSuperclass不能持久化字段吗?

[英]Fields not persisting using MappedSuperclass in Symfony 2/Doctrine 2?

MappedSuperclass

/** @ORM\MappedSuperclass */
abstract class AbstractMessage
{
    /** @ORM\Column(type="text", nullable=true) */
    protected $content;
}

还有一个子类,重新定义$content以添加一些自定义验证断言:

/** @ORM\Entity */
class InternalMessage extends AbstractMessage
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @Assert\NotBlank(message="Internal message title is required.")
     */
    protected $content;

    /** @return integer */
    public function getId() { return $this->id; }

    /**
     * @param string $content
     * @return InternalMessage
     */
    public function setContent($content)
    {
        $this->content = $content;
        return $this;
    }

    /** @return string */
    public function getContent() { return $this->content; }
}

$content覆盖父对象时

在我的示例中, $content不会持久存在! null字段...

从子项中删除$content

如果我从InternalMessage字段中删除$content InternalMessage保留,而验证不再起作用。

这是错误还是什么? 我打开了一个问题,但不知道它是否在正确的位置(我对github的工作方式是陌生的)。

太糟糕了,我意识到Doctrine继承是错误的(从生成器本身开​​始...)。

Afaik,这无法完成,Doctrine2继承策略不允许您从MappedSuperClass重新定义属性。

这应该是反射系统的限制。

最好的选择是提取验证配置,然后将其移动到独立的XMLYML文件中。

您可能还想为您的ORM进行此操作(但您需要对捆绑商品中的所有实体进行此操作),因为它将为您提供更大的灵活性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM