doctrine2 symfony2关系实体

时间:2015-08-25 02:07:53

标签: symfony doctrine-orm

我有一个很大的问题。

1。我有一个FOS用户我有一个注册监督员的形式,注册过程非常好。

2。每个主管都有他的个人,他还有一个添加个人的表格,这个表格就像是主管的注册,并且添加过程属于同一级别的主管级用户。

- >所以主管和他的负责人在同一个班级。

现在的问题:

当一位主管登录时,我将如何选择他的Personals并且在同一张表中?

建议:

1。我在同一个类中执行ManyToOne和OneToMany具有2个属性的用户父类和子类如下:

/**
 * @ORM\OneToMany(targetEntity="Common\AuthenticationBundle\Entity\User", mappedBy="parent")
 */
protected $childs;

public function __construct() {
    $this->childs = new ArrayCollection();
}

/**
 * @ORM\ManyToOne(targetEntity="Common\AuthenticationBundle\Entity\User", inversedBy="childs")
 * @ORM\JoinColumn(nullable=false)
 */
private $parent;

我不知道它是如何运作的?

2。我创建了另一个Class SupervisorPersonal,当主管添加新的个人时,我将supervisor_id和personal_id放在一起。

这也存在与Doctrine映射的问题:2类与Doctrine如何进行密钥迁移之间的关系是什么?

1 个答案:

答案 0 :(得分:1)

实现此方案的理想方法是在User类上创建多对一关系。多对一关系将代表许多属于User类的个人,他们与单个主管有关系,该主管也属于同一个User类。

在yml配置中,这可以表示为

manyToOne:
supervisor:
  targetEntity: Common\AuthenticationBundle\Entity\User
  joinColumn:
    name: supervisor_id
    referencedColumnName: id

和注释

/**
 * @ManyToOne(targetEntity="Common\AuthenticationBundle\Entity\User")
 * @JoinColumn(name="supervisor_id", referencedColumnName="id")
 **/
private $supervisor;

要获得主管的所有个人,您必须编写一个以supervisorId为参数的存储库函数。

public function getAllPersonslsForSupervisor($supervisorId)
{
    $em = $this->getEntityManager();

    $query = $em->createQuery("SELECT e FROM AuthenticationBundle:User e
         WHERE e.supervisor = :supervisor")
            ->setParameter('supervisor', $supervisorId);

    $entities = $query->getResult();

    return $entities;
}

您可能必须在查询中为实体指定正确的命名空间。