与类型象征主义的多对多关系



我有这样的实体结构

class Group
{
/**
* @var int
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private int $id;
/**
* @var string
* @ORMColumn(name="name", type="string", length=50, nullable=false)
*/
private string $name;
}

class GroupUser
{
/**
* @var int
*
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private int $id;
/**
* @var Group
* @ORMManyToOne(targetEntity="Group", inversedBy="GroupUser")
* @ORMJoinColumn(name="group_id", referencedColumnName="id", nullable=false)
*/
private Group $group;
/**
* @var string
* @ORMColumn(type="string", length=50, nullable=false)
*/
private string $type;
/**
* @var int
* @ORMColumn(type="integer", nullable=false)
*/
private int $user;
}

有两种类型的用户。管理员和客户端。"组"one_answers"用户"之间存在"多对多"关系。GroupUser$类型中的属性保存Admin或Client的Class,属性$user保存id。

类型实体\管理
idgroup_id用户
221实体\客户端

通常,您不能在数据库上执行此操作,因为它不安全。为什么它不安全?因为在userGroup表的user列中可以有一个id,因为它没有链接,所以不引用任何内容。

我会写下你应该做什么,以及如何使用自己的方法实现你想要的:

您应该做的:UserGroup实体中,有两列(adminclient(链接到相关实体。它们可以为null(如果Client是admin,则admin包含admin实体的id,反之亦然(。然后您可以删除type

如何使用您的方法实现目标:由于无法在数据库中完成,您将不得不在某个管理器中完成。有一个方法getUser,它将检查您的type属性,并从存储在$user中的当前id返回关联实体

示例:

public function getUserFromGroupUser(GroupUser $groupUser){
if('EntityAdmin' ===$groupUser->getType()){
return $this->adminRepository->find($groupUser->getUser());
}
if('EntityClient' ===$groupUser->getType()){
return $this->ClientRepository->find($groupUser->getUser());
}
throw new RuntimeException('the type does not exist');
}

相关内容

  • 没有找到相关文章

最新更新