如何使用来自另一个实体的对象列表的对象映射实体属性?

时间:2017-03-25 14:42:45

标签: symfony doctrine-orm associations model-associations

我无法弄清楚哪个是使用来自存储在不同实体中的对象列表中的选定对象映射实体属性的最佳方法。

示例用例:

  • 我有一个AccountType实体,有5种帐户类型(我需要有一个实体,因为它有很多关联和属性,比如启用等等...... )。
  • 我有一个User实体,其$accountType属性。
  • User只能选择一个AccountType使用表单)。

问题:

映射User:accountType属性的常用方法是什么?考虑到那时我将需要检索一些统计数据,以检索属于每种帐户类型的所有用户,等等。

我应该将$accountType映射为string并使用Data Transformer来预测字符串,还是使用oneToOne关联存在一些其他方法,例如地图$accountType

1 个答案:

答案 0 :(得分:1)

这很常见。你需要一个ManyToOne关系。

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();

这只需要在您的实体中完成一些工作,但只需几行代码即可实现强大功能。