我正在使用Symfony2构建应用程序并使用Doctrine作为我的ORM。
我的用户需要存储相当多的特定于他们的配置/设置(想想'您是否希望接收我们发送的电子邮件?'作为设置的典型示例待存储。)
对我来说,最好的方法是什么?
我应该为每个设置添加属性到我的用户实体吗?
protected $receiveEmails;
或者我应该创建一个' userSetting'实体,与我的用户对象具有manyToMany关系,并且userSetting实体具有两个其他属性:
protected $setting;
protected $value;
我要求的主要原因是表现。我希望在用户对象上有一个属性,所以某些设置可以是boolean类型,其他字符串等,但是我不希望每次获得当前用户实体时我的网站都会从数据库中获取这些值(漂亮自我的身份验证后,每个页面都会退回我的数据库中的用户实体。
答案是什么?我是否需要返回并重新编写使用的任何实例:
....getRepository('AcmeMainBundle:User')->find($id)
使用自定义存储库功能,只选择我需要的元素吗?
或者我过度优化?
答案 0 :(得分:1)
有两种方式。
1)如你所说,建立一个ManyToMany
关系的独立实体。
2)建立一个OneToOne
关系的独立实体,其中实体的每个属性都是设置名称。
由于性能的原因,我会选择第二种选择。具有许多列的一行比许多一列行更好。而且它也更容易处理和实施。