【问题标题】:How to map an entity property with an object coming from a list of objects of another entity?如何将实体属性与来自另一个实体的对象列表的对象映射?
【发布时间】:2017-03-25 14:42:44
【问题描述】:

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

示例用例:

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

问题:

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

我应该将$accountType 映射为string 并使用Data Transformer 来对字符串进行插值还是存在其他一些方法,例如使用oneToOne 关联映射$accountType

【问题讨论】:

    标签: symfony doctrine-orm associations model-associations


    【解决方案1】:

    这很常见。您需要多对一关系。

    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 并使用其他方法? (不是完整的代码,但只有一点带有sintetic的解释)。我会在几个小时后回来:-)
    • 我没有使用过 DataTransformer,但我认为这不是你想要的,因为你有一个 AccountType 实体。您链接的 DataTransformer 页面中的示例具有存储为数组的属性(标记)。如果您选择了这种方法,您将无法(从用户)访问链接的 AccountType 上的属性,除非您跳过其他一些环节来创建对象。如果您可以自动获取所有内容,为什么要这样做?
    猜你喜欢
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2019-04-27
    • 1970-01-01
    相关资源
    最近更新 更多