Symfony2 - 数据库 table 关系
Symfony2 - Database table relationships
我正在开发一个应用程序,一切都设置得很好。我有一个采用以下形式的警报实体。
/**
* 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
}
所以我让这个应用程序正常工作,但现在我决定添加一个登录系统。每个警报现在都应与一个用户相关联 - 一个用户可以 none 多个警报。
所以我创建了我的用户 class 并设置了所有安全措施。实体看起来像
/**
* 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
}
那么将警报关联到用户的最佳方式是什么?我是否应该像对待警报 class 中的其他实体那样设置它?我是否应该在用户 class 中添加一个 Alert 变量,这是一个警报数组集合?
真的只是在寻找一些如何最好地处理这个问题的建议。
谢谢
除了在 Alert
实体或 ManyToMany
中使用 ManyToOne
关联之外,我在这里看不到任何其他解决方案,以防一个警报必须与超过 1 个用户相关联。
Should I add an Alert variable within the user class which is an Array Collection of Alerts?
哎呀,为什么不呢?这样您就可以轻松地让用户加入警报。
是的,您应该在用户实体中添加一对多关系,link 与警报实体和警报实体以多对一的方式指向用户实体
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;
}
我正在开发一个应用程序,一切都设置得很好。我有一个采用以下形式的警报实体。
/**
* 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
}
所以我让这个应用程序正常工作,但现在我决定添加一个登录系统。每个警报现在都应与一个用户相关联 - 一个用户可以 none 多个警报。
所以我创建了我的用户 class 并设置了所有安全措施。实体看起来像
/**
* 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
}
那么将警报关联到用户的最佳方式是什么?我是否应该像对待警报 class 中的其他实体那样设置它?我是否应该在用户 class 中添加一个 Alert 变量,这是一个警报数组集合?
真的只是在寻找一些如何最好地处理这个问题的建议。
谢谢
除了在 Alert
实体或 ManyToMany
中使用 ManyToOne
关联之外,我在这里看不到任何其他解决方案,以防一个警报必须与超过 1 个用户相关联。
Should I add an Alert variable within the user class which is an Array Collection of Alerts?
哎呀,为什么不呢?这样您就可以轻松地让用户加入警报。
是的,您应该在用户实体中添加一对多关系,link 与警报实体和警报实体以多对一的方式指向用户实体
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;
}