【问题标题】:Ensure Symfony2 Entity Property Type Is Correct After Retrieving From Database从数据库检索后确保 Symfony2 实体属性类型正确
【发布时间】:2013-10-08 08:34:42
【问题描述】:

我有一个 Symfony2 实体,它具有给定类类型的非标量属性。该属性可以安全地转换为字符串,这就是它在数据库中的持久化方式。

当从数据库中检索到该实体的实例时,该属性的 getter 会返回一个字符串,而不是预期类的对象。

这是一个通用的示例实体:

<?php
namespace Acme\ExampleBundle\Entity;    

class ExampleEntity
{    
    /**
     * @var \example\ComplexObject
     * @\Doctrine\ORM\Mapping\Column(type="string")
     */
    protected $property;        

    /**
     * @param \example\ComplexObject $property
     * @return \ExampleEntity 
     */
    public function setProperty(\example\ComplexObject $property) {
        $this->property = $property;
        return $this;
    }        

    /**
     * @return \example\ComplexObject
     */
    public function getProperty() {
        return $this->property;
    }        
}

需要明确的是,在从数据库检索后对该实体的实例调用 getProperty() 会返回一个字符串,而不是 \example\ComplexObject 的实例。

我很欣赏 Symfony 和/或 Doctrine 不知道如何将从数据库中直接检索到的字符串值转换为所需的对象。

在代码期望对象是给定类型而不是字符串的情况下,我可以执行字符串到对象的转换,但是如果在从数据库。

我有一个用于该实体的自定义实体存储库,并尝试覆盖 find() 方法,但似乎没有调用它。

我可以修改 getProperty() 方法以将字符串转换为正确的对象类型,但这似乎不优雅,并且将实体和相关字符串与对象翻译器联系得太紧密。

在 Symfony2 项目的上下文中,当前最优雅的最佳实践方法是确保从数据库中检索给定实体的属性设置为正确的类型?

【问题讨论】:

  • 可能和学说的懒加载有关
  • 对象是一个实体还是另一个类?
  • @Flosculus 完全是另一类

标签: symfony doctrine-orm entity


【解决方案1】:

您应该为此使用自定义映射类型。请参阅http://docs.doctrine-project.org/en/latest/cookbook/advanced-field-value-conversion-using-custom-mapping-types.html 了解如何实现它们。特别是看看convertToPHPValue()convertToDatabaseValue() 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多