多种帐户类型?

时间:2013-10-02 06:10:51

标签: php database symfony doctrine-orm class-table-inheritance

我目前正在使用Symfony2和doctrine。我正在开发一个“创建帐户”页面。页面上有两种不同类型的帐户,一种用于normal-users,另一种用于companies

我有一个名为Account的实体(表格),此表格包含usernamepasswordsalt列。

如果公司登录我希望从company - 表中获取公司信息,如果normal-user登录,我想要user - 表中的信息。

我一直在考虑有一个名为usertype的列,告诉我它是什么类型,然后如果usertype是company检索公司信息实体,如果它是user 1}}检索用户信息实体(对应于帐户的id)。

这是解决这个问题的好方法吗?或者我应该有2张不同的桌子? AccountUser和AccountCompany?

1 个答案:

答案 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
{
    // ...
}