2013-03-01 52 views
1

我正在用Symfony2构建一个应用程序,并使用Doctrine作为我的ORM。用原则处理用户设置

我的用户需要存储大量特定于他们的配置/设置(想'想从我们那里收到电子邮件?'作为要存储的设置的典型示例)。

对我来说,构建这个最好的方法是什么?

我应该为每个设置的属性添加到我的用户实体吗?

protected $receiveEmails; 

或者我应该创建一个“userSetting”的实体,与我的用户对象一个多对多的关系,并有userSetting实体有两个其他属性:

protected $setting; 
protected $value; 

我问的主要原因是性能。我更喜欢在用户对象上有一个属性,所以某些设置可以是布尔类型,其他字符串等,但不希望让我的站点从数据库中获取这些值,每次我获得当前用户实体(几乎每一个因为我的身份验证在我的数据库中关闭了用户实体)。

答案是?我需要回去重新写使用的任何实例:通过自定义库函数

....getRepository('AcmeMainBundle:User')->find($id) 

只选择我需要的是形势的要素是什么?

还是我过度优化?

回答

1

有两种方法。

1)根据您的说法,与ManyToMany建立单独的实体关系。

2)使用OneToOne关系创建一个单独的实体,其中实体的每个属性都是设置名称。

我会选择第二个选项,因为性能。有许多列的行比许多单列行好。而且它更容易处理和实施。

+0

第二种选择是有道理的。我正确地假设走这条路线,除非我明确地调用我的用户对象上的getMySetting getter方法,否则我的'设置'实体都不会被加载? – Anonymous 2013-03-01 15:11:34

+0

@anonymous,如果你让你的oneToOne加载设置始终会被加载。 – 2013-03-01 16:35:34