2017-10-07 127 views
0

我有几个实体,我尝试建立用户和权限之间的关系。我想有可能将权限组分配给用户,所以我创建了实体User,GroupAssociationsUser,Permissions。我认为最好的方法是创建GroupAssociationsUser中的ManyToOne与用户和权限的关系。娄你可以看到GroupAssociationsUser实体代码:Symfony 3,ManyToOne关系的形式

/** 
* @ORM\ManyToOne(targetEntity="Permissions", inversedBy="group_assoc_user") 
* @ORM\JoinColumn(name="group_permissions", referencedColumnName="id", nullable=FALSE) 
*/ 
private $group_permissions; 

/** 
* @ORM\ManyToOne(targetEntity="User", inversedBy="group_assoc_user") 
* @ORM\JoinColumn(name="user_assoc", referencedColumnName="id", nullable=FALSE) 
*/ 
private $user_assoc; 

然后,我在User实体还创建关系:

/** 
* @ORM\OneToMany(targetEntity="GroupAssociationsUser", mappedBy="user_assoc") 
*/ 
private $group_assoc_user; 


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

最后,在许可的实体:

/** 
* @ORM\OneToMany(targetEntity="GroupAssociationsUser", mappedBy="group_permissions") 
*/ 
private $group_assoc_user; 

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

所以基本上我想有在我的用户编辑页面选择列表,我想有可能选择权限组分配给用户。

因此,我创建形式:

->add('group_assoc_user', EntityType::class, array(
      'class' => 'AppBundle:Permissions', 
      'choice_label'=> 'group_name', 
      'placeholder' => 'no rights', 
     )) 

而问题是,没有母校我做什么,我有退出的权限只有列表,或者如果我改变代码:

 ->add('group_assoc_user', EntityType::class, array(
      'class' => 'AppBundle:GroupAssociationsUser', 
      'choice_label'=> 'Permissions.group_name', 
      'placeholder' => 'no rights', 
     )); 

我只列出了未分配的权限。我究竟做错了什么?

即使我获得了所有权限名称,我可以如何强制学说标记已分配的字段?

+0

尝试使用查询生成器 - [像这样](http://symfony.com/doc/current /reference/forms/types/entity.html#using-a-custom-query-for-the-entities) –

+0

嗨,彼得, 什么我应该返回? ' '类'=> '的appbundle:权限', 'query_builder'=>函数(EntityRepository $ ER){ \t \t \t \t \t回$ ER-> createQueryBuilder( 'U') \t \t \t \t \t - > orderBy('u.id','ASC'); \t \t \t \t},' 使用我的方法(上面的代码),我可以得到分配的字段信息,但没有未分配。或者就像在第一个例子中,我可以获得所有权限,但我不知道如何选择所选(

回答