1

私は 3 つのエンティティを持っています: 会社、部門、およびユーザー ユーザーは、会社と 1 対多の関係を持っています。部門は、会社とユーザーの両方との多対 1 の関係を分離しています

目標は、部門ごとに異なる部門を構成し、ユーザーが会社に属する部門から (プロファイルで) 選択できるようにすることです。

私は組み込みのエンティティフィールド タイプでこれを達成しようとしています。私の問題は、Symfony がフィールドをレンダリングするときに、ユーザーがそのユーザーの会社に属する部門だけでなく、任意の部門を選択できることです。

カスタム クエリを使用してみましたが、$company が存在しないというエラーが表示されます (関数内にあるにもかかわらず)。これは、カスタム クエリが独自のスコープを持つクロージャー内にあるためだと思います。

4

1 に答える 1

2

カスタム クエリを使用するというあなたの提案は完全に正しかったです。カスタム クエリのスコープ内でオブジェクトを使用するには、useステートメントを使用する必要があります。例えば:

    $company = $user->getCompany();

    $builder->add('department', 'entity', array(
        'class' => 'YourSpecialBundle:Department',
        'property' => 'name',
        'query_builder' => function(EntityRepository $er) use($company) {
             return $er->createQueryBuilder('r')
                     ->where('r.company = :company')
                     ->setParameter("company", $company);
         }
    ));

複数のフィルターを定義する必要がある場合:

    $company = $user->getCompany();

    $builder->add('department', 'entity', array(
        'class' => 'YourSpecialBundle:Department',
        'property' => 'name',
        'query_builder' => function(EntityRepository $er) use($company) {
             return $er->createQueryBuilder('r')
                     ->where('r.company = :company AND r.active = :active')
                     ->setParameter(array(
                            "company" => $company,
                            "active" => true
                     ));
         }
    ));
于 2012-10-05T05:27:15.507 に答える