symfony2 - 多对多关系/表格

时间:2012-11-25 18:07:47

标签: symfony doctrine-orm

我遇到涉及多对多关系的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)
  4. 因此,用户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'));
    

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

    谢谢!

1 个答案:

答案 0 :(得分:0)

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

$builder->add('projects')

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

Symfony doc中的更多内容:http://symfony.com/doc/current/book/forms.html#creating-form-classes