symfony2-多对多关系/形式



我遇到了一个涉及多对多关系的Symfony2问题:我有一个用户实体和一个项目实体,它们与多对多关联:

我的用户实体:

class User implements UserInterface
{
[...]
/**
* @ORMManyToMany(targetEntity="Project", inversedBy="users", cascade={"persist"})
* @ORMJoinTable(name="user_project",
*     joinColumns={@ORMJoinColumn(name="user_id", referencedColumnName="id")},
*     inverseJoinColumns={@ORMJoinColumn(name="project_id", referencedColumnName="id")}
* )
*
* @var ArrayCollection $projects
*/
protected $projects;

我的项目实体:

class Project
{
[...]
/**
* @ORMManyToMany(targetEntity="User", mappedBy="projects")
*/
protected $users;

Symfony2创建了"链接"表(称为user_project),然后我插入了一些行。例如,我有两个用户(id=1/id=2)和两个项目(id=1/id=2)。

在我的表user_project中,我插入了以下行:

  1. 1(用户id)-1(项目id)
  2. 1(用户id)-2(项目id)
  3. 2(用户id)-1(项目id)

因此,用户1同时分配给项目1和2,而用户2仅分配给项目1。

我的问题是,我不知道如何为指定的用户选择项目。例如,我想(在我的表单中)显示一个选择框,其中包含分配给我的用户的项目。(对于用户2,我只想拥有项目1。在我的选择框中)

我的表格:

$builder->add('project', 'entity', array(
'class' => 'WebaccessBugtrackerBundle:Project',
'property' => 'name',
'query_builder' => function($er) use ($userManager) {
$qb = $er->createQueryBuilder('project')
->orderBy('project.name', 'ASC');
$qb-> ????

}
return $qb;
},
'property' => 'name'));

我希望你能理解我的意思,并能帮助我:)

谢谢!

如果您已经为User实体创建了一个表单类,只需将其添加到buildForm()函数中即可:

$builder->add('projects')

Symfony应该猜测您想要一个包含该特定用户的项目的选择列表。

Symfony文档中对此有更多介绍:http://symfony.com/doc/current/book/forms.html#creating-表单类

最新更新