我正在构建一个将由某些用户使用的应用程序。根据业务逻辑定义,将通过电子邮件标识用户,因此不会在整个系统中重复发送电子邮件。这是UML类图的摘录:
我一直在阅读人们如何使用Symfony 4和Doctrine ORM来实现它,每个人都在让Doctrine创建一个数字ID作为实体标识符。根据我的图表,我应该这样做吗?
这是我目前的状态:
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @UniqueEntity(
* fields="email",
* message="error.email_already_registered"
* )
*/
class User implements UserInterface
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=180, unique=true)
* @Assert\NotBlank
* @Assert\Email
* @Assert\Length(min=4,max=180)
*/
private $email;
应该与以下代码相似吗?
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
*/
class User implements UserInterface
{
/**
* @ORM\Column(type="string", length=180)
* @ORM\Id()
* @Assert\Email
* @Assert\Length(min=4,max=180)
*/
private $email;
答案 0 :(得分:0)
“应该”取决于您的要求。既可以使用唯一的数字标识符,也可以将电子邮件字段设置为唯一(如第一个摘录中所述)是完全可以的。这有助于在用户实体和其他实体之间建立关系,因为它们具有用于连接表的“简单”字段。
如果将电子邮件地址字段用作该实体的唯一标识符,则必须在所有关系表中使用该值。我不确定这是否会自动发生,但是稍后更改地址时,您必须将此更改传播到所有相关表中。为避免麻烦,请使用数字标识符-永远不应更改的数字标识符,并始终引用该用户实体。
答案 1 :(得分:0)
不要对UNIQUE和PRIMARY KEY感到困惑。 唯一值可以更改,但主键不应更改,但两者均为INDEX
那么,就您而言,电子邮件可以改变您的业务逻辑吗?
如果是,请不要将其添加为PRIMARY KEY,而应仅是UNIQUE INDEX。否则,您可以将其用作主键。