2012-11-25 133 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。 –