我正在开发一个应用程序并且设置得很好。我有一个Alert实体,它采用以下形式。
/**
* Alert
*
* @ORM\Table(name="alert")
* @ORM\Entity(repositoryClass="Nick\AlertBundle\Repository\AlertRepository")
*
*/
class Alert
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="search_command", type="string", length=256, nullable=false)
*/
private $searchCommand;
/**
* @var string
*
* @ORM\Column(name="is_connecting", type="string", length=20, nullable=false)
*/
private $isConnecting;
/**
* @var \DateTime
*
* @ORM\Column(name="last_updated", type="datetime", nullable=false)
*/
private $lastUpdated;
/**
* @var boolean
*
* @ORM\Column(name="is_deleted", type="boolean", nullable=false)
*/
private $isDeleted;
/**
* @var string
*
* @ORM\Column(name="alert_status", type="string", length=11, nullable=false)
*/
private $alertStatus;
/**
* @ORM\OneToMany(targetEntity="Nick\AlertBundle\Entity\BookingClass", mappedBy="availabilityAlert")
*/
private $bookingClass;
/**
* @ORM\OneToMany(targetEntity="Nick\AlertBundle\Entity\Pseudos", mappedBy="availabilityAlert")
*/
private $pseudo;
/**
* @ORM\OneToMany(targetEntity="Nick\AlertBundle\Entity\FlightNumbers", mappedBy="availabilityAlert")
*/
private $flightNumbers;
/**
* @ORM\OneToMany(targetEntity="Nick\AlertBundle\Entity\Availability", mappedBy="availabilityAlert")
*/
private $availability;
/**
* Constructor
*/
public function __construct()
{
$this->bookingClass = new ArrayCollection();
$this->pseudo = new ArrayCollection();
$this->flightNumbers = new ArrayCollection();
$this->availability = new ArrayCollection();
}
//other methods
}
所以我有这个应用程序工作,但现在我已经决定添加一个登录系统。现在,每个警报都应该与用户相关联 - 用户可以拥有无多个警报。
所以我创建了我的用户类并设置了所有安全性。该实体看起来像
/**
* User
*
* @ORM\Table(name="user_table")
* @ORM\Entity()
*
*/
class User implements UserInterface
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="username", type="string", length=255, nullable=false)
*/
private $username;
/**
* @var string
*
* @ORM\Column(name="password", type="string", length=255, nullable=false)
*/
private $password;
//other functions
}
那么将警报与用户关联的最佳方法是什么?我应该像我在Alert类中与其他实体一样进行设置吗?我应该在用户类中添加一个Alert变量,它是一个警报的数组集合吗?
真的只是寻求一些建议如何最好地处理这个。
由于
答案 0 :(得分:1)
除了在ManyToOne
实体或Alert
中使用ManyToMany
关联之外,我还没有真正看到任何其他解决方案,以防一个警报必须与超过1个用户相关联。
我应该在用户类中添加一个Alert变量,它是一个警报的数组集合吗?
哎呀,为什么不呢?这样,您就可以轻松获得已加入警报的用户。
答案 1 :(得分:1)
是的,您应该在用户实体中添加一对多关系并与警报实体链接,并在警报实体中以多对一的方式指向用户实体
class User
{
/**
* @ORM\OneToMany(targetEntity="Alert", mappedBy="user")
*/
protected $alerts;
public function __construct()
{
$this->alerts= new ArrayCollection();
}
//... other getters amd setters
}
class Alert
{
// ...
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="alerts")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
}