我目前正在使用Symfony2和doctrine。我正在开发一个“创建帐户”页面。页面上有两种不同类型的帐户,一种用于normal-users
,另一种用于companies
。
我有一个名为Account
的实体(表格),此表格包含username
,password
和salt
列。
如果公司登录我希望从company
- 表中获取公司信息,如果normal-user
登录,我想要user
- 表中的信息。
我一直在考虑有一个名为usertype
的列,告诉我它是什么类型,然后如果usertype是company
检索公司信息实体,如果它是user
1}}检索用户信息实体(对应于帐户的id
)。
这是解决这个问题的好方法吗?或者我应该有2张不同的桌子? AccountUser和AccountCompany?
答案 0 :(得分:2)
如果公司表中有许多列在用户表中不存在,反之亦然,解决问题的最佳方法是使用class-table inheritance创建三个表:帐户,用户,公司。用户和公司必须是帐户实体的子类。
根据上面的链接,你应该有这样的代码:
namespace MyProject\Model;
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="usertype", type="string")
* @DiscriminatorMap({"user" = "User", "company" = "Company"})
*/
class Account
{
// ...
}
/** @Entity */
class User extends Account
{
// ...
}
/** @Entity */
class Company extends Account
{
// ...
}