mysql - 两张表,两种关系

标签 mysql database symfony doctrine-orm fosuserbundle

我有两张 table ;机构和用户。

在大多数情况下,用户将属于代理机构,否则将为空。这种关系的建模非常简单,我在用户实体类/表中有一个可为空的 Agency_id 列/属性。

代理机构还必须拥有管理员用户。一个机构可以拥有多个管理员用户。我正在努力模拟这种关系。

如何表示实体类/数据库表中的第二个关系?我正在使用 Doctrine 2 (MySQL)、Symfony 3 和 FOSUserbundle。

感谢任何帮助。

最佳答案

您应该能够使用 Doctrine 通过 OneToMany 关系船对此进行建模。用户和管理员本质上都是他们的关系(至少如果一个用户只能是一个机构的管理员,否则这需要是一个多对多引用)。

有关教义协会的信息可以在这里找到:

http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/association-mapping.html

以下是一些未经测试的代码,应显示关联:

/**
 * @ORM\Entity
 */
class Agency {
    /**
     * @ORM\OneToMany(targetEntity="User", mappedBy="agency")
     *
     * @var $users \Doctrine\Common\Collections\Collection
     */
     protected $users;

     /**
     * @ORM\OneToMany(targetEntity="User", mappedBy="adminOfAgency")
     *
     * @var $users \Doctrine\Common\Collections\Collection
     */
     protected $admins;

     public function __construct() {
          $this->users = new \Doctrine\Common\Collections\ArrayCollection();
          $this->admins = new \Doctrine\Common\Collections\ArrayCollection();
     }

}

.

/**
 * @ORM\Entity
 */
class User extends \FOS\UserBundle\Entity\User {
    /**
     * @ORM\ManyToOne(targetEntity="Agency", inversedBy="users")
     * @JoinColumn(name="agency_id", referencedColumnName="id")
     */
     protected $agency;

     /**
     * @ORM\ManyToOne(targetEntity="Agency", inversedBy="admins")
     * @JoinColumn(name="admin_of_agency_id", referencedColumnName="id")
     */
     protected $adminOfAgency;

}

关于mysql - 两张表,两种关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35891513/

相关文章:

mysql - 如何提高MySQL组复制的性能?

mysql - 对桥实体和多属性实体感到困惑

Php规范。当 mock 必须返回一个对象时调用非对象的成员函数

php - session 在 Localhost 中正常工作,但在 CPANEL 中不正常

mysql - 如果在子行中找到匹配,则删除父行,mysql UNION

php - 如何限制MySQL数据库中的行项目数

mysql - mysql中大连接和单表多查询哪个效率更高?

android - 如何从 SQLite 的列表 fragment 中获取我的 ListView 类?

php - 将应用程序中的所有 css 合并到一个 css 文件中是个好主意吗?

php - 如何使用 phpunit 和 Liip 传递不记名 token 以测试 API