我有一个很大的问题。
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如何进行密钥迁移之间的关系是什么?
答案 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;
}
您可能必须在查询中为实体指定正确的命名空间。