1

我遇到了涉及多对多关系的 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'));

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

谢谢 !

4

1 回答 1

0

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

$builder->add('projects')

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

Symfony 文档中的更多信息:http: //symfony.com/doc/current/book/forms.html#creating-form-classes

于 2012-11-25T18:37:46.460 回答