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 に答える