Symfony 如何将实体属性与来自另一实体的对象列表的对象进行映射?

Symfony 如何将实体属性与来自另一实体的对象列表的对象进行映射?,symfony,doctrine-orm,associations,model-associations,Symfony,Doctrine Orm,Associations,Model Associations,我不知道哪种方法是将实体属性与来自存储在不同实体中的对象列表的选定对象进行映射的最佳方法 示例用例: 我有一个具有5种帐户类型的AccountType实体(我需要一个实体,因为它将有许多关联和属性,如enabled等) 我有一个具有$accountType属性的用户实体 用户只能选择一个账户类型(使用表单) 问题: 映射用户:accountType属性的常用方法是什么?考虑到这一点,我需要检索一些统计数据,比如检索属于每个帐户类型的所有用户,等等 我是否应该将$accountType映射为字

我不知道哪种方法是将实体属性与来自存储在不同实体中的对象列表的选定对象进行映射的最佳方法

示例用例:

  • 我有一个具有5种帐户类型的
    AccountType
    实体(我需要一个实体,因为它将有许多关联和属性,如enabled等)
  • 我有一个具有
    $accountType
    属性的
    用户
    实体
  • 用户
    只能选择一个
    账户类型
    (使用表单)
问题:

映射
用户:accountType
属性的常用方法是什么?考虑到这一点,我需要检索一些统计数据,比如检索属于每个帐户类型的所有用户,等等


我是否应该将
$accountType
映射为
字符串
,并使用a对字符串进行重新定位,或者使用oneToOne关联存在其他方法,如map
$accountType
。你需要一个多人的关系

class User
{
    //...

    /**
     * Many Users will have One AccountType
     *
     * @ORM\ManyToOne(targetEntity="AccountType")
     */
    private $accountType;


    /**
     * @return AccountType
     */
    public function getAccountType()
    {
        return $this->accountType;
    }
}
然后,您可以访问绑定到用户的accountType对象,如下所示:

$user->getAccountType(); // AccountType object
根据您的需要,您可能需要定义双向关系(即,在AccountType实体中定义一个OneToMany关系)。这将允许您执行以下操作:

$accountType->getUsers();

这只需要在您的实体中多做一点工作,但只需几行代码就非常强大。

感谢您的帮助,我还没有时间深入研究文档并寻找您的答案。这似乎是本案例的正确方法。为了完成回答,您能否添加一个非常简单/常见的案例/示例,其中我应该使用DataTransformer并使用另一种方法?(不是完整的代码,但只有一点解释)。我将在几个小时后回来:-)我没有使用DataTransformer,但我认为这不是您想要的,因为您有一个AccountType实体。链接的DataTransformer页面中的示例具有存储为数组的属性(标记)。如果选择此方法,则(从用户)将无法访问链接的AccountType上的属性,除非您跳过一些其他环来创建对象。如果你能自动完成,为什么要这么做?