2012-11-25 96 views
1

我被一个涉及多对多关系的Symfony2问题卡住了:我有一个用户实体和一个项目实体,与多对多关系:symfony2 - 多对多关系/表格

我的用户实体:

class User implements UserInterface 
{ 

[...] 

/** 
* @ORM\ManyToMany(targetEntity="Project", inversedBy="users", cascade={"persist"}) 
* @ORM\JoinTable(name="user_project", 
*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="project_id", referencedColumnName="id")} 
*) 
* 
* @var ArrayCollection $projects 
*/ 
protected $projects; 

我的项目实体:

class Project 
{ 

[...] 

/** 
* @ORM\ManyToMany(targetEntity="User", mappedBy="projects") 
*/ 
protected $users; 

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

以我表user_project我插入下面的行:

  1. 1(USER_ID) - 1(PROJECT_ID)
  2. 1(USER_ID) - 2-(PROJECT_ID)
  3. 2(USER_ID) - 1 (project_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')); 

我希望你明白我在说什么,你能帮助我:)

谢谢!

+0

显示整个窗体类型和操作 – nikita2206

+0

的代码检查我的问题,我有同样的问题,我只是解决吧! http://stackoverflow.com/questions/21173133/many-to-many-and-form-symfony2 – JGrinon

回答

0

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

$builder->add('projects') 

和Symfony的应该猜你想用项目此特定用户选择列表。

更多关于这方面的Symfony的DOC:http://symfony.com/doc/current/book/forms.html#creating-form-classes

+0

感谢您的答案,我要检查这一点。 – shifty

+0

不客气。这也假设你已经在你的包中使用了app/console doctrine:generate:entities命令来创建将被表单类自动使用的getter和setter。 –