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;
}

Reference