首页 > 解决方案 > symfony 中的教义协会

问题描述

所以我已经和 Symfony 合作了一段时间,但有一件事让我很烦恼。这是关于教义协会的。问题是我正在尝试实现用户朋友邀请和关系,并且有一个页面,用户可以看到他发送的邀请以及待处理的邀请。

编辑:我使用多对一/一对多关联实现了它。但是我的问题是——教义协会是正确的做法吗?

我的用户实体

class User implements UserInterface
{ 
private $id;
/**
 * @ORM\Column(name="first_name", type="string", length=30)
 *
 * @Assert\NotBlank(message="First name cannot be a blank field", groups={"register"})
 * @Assert\Length(min="3", max="30", groups={"register"})
 */

/**
 * @ORM\Column(type="string", length=50)
 *
 * @Assert\NotBlank(message="Username cannot be a blank field", groups={"register"})
 * @Assert\Length(min="7", max="50", groups={"register"})
 */
private $username;

/**
 * @ORM\Column(type="string", length=255)
 *
 * @Assert\Length(min="7", max="50", groups={"register"})
 */
private $password;



/**
 * @ORM\OneToMany(targetEntity="App\Entity\UserInvitation", mappedBy="inviterId", orphanRemoval=true)
 */
private $userInvitations;

/**
 * @ORM\OneToMany(targetEntity="App\Entity\UserInvitation", mappedBy="invitedId", orphanRemoval=true)
 */
private $pendingUserInvitations;

//getters and setters 

我的 UserInvitation 实体

class UserInvitation
{
/**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type="integer")
 */
private $id;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="userInvitations")
 * @ORM\JoinColumn(name="inviter_id", nullable=false)
 */
private $inviterId;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="pendingUserInvitations")
 * @ORM\JoinColumn(name="invited_id", nullable=false)
 */
private $invitedId;

/**
 * @ORM\Column(type="boolean")
 */
private $status;

这是我的数据库。

我的数据库

标签: phpsymfonyormdoctrineassociations

解决方案


关系是正确的方法,尽管在实体上我会使用以下内容:

class UserInvitation
{
/**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type="integer")
 */
private $id;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="userInvitations")
 * @ORM\JoinColumn(name="inviter_id", nullable=false)
 */
private $inviter;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="pendingUserInvitations")
 * @ORM\JoinColumn(name="invited_id", nullable=false)
 */
private $invitee;

/**
 * @ORM\Column(type="boolean")
 */
private $status;

然后你会 getInviter() 或 setInviter()。基本上认为您将相关对象保存到实体而不是相关字段


推荐阅读