3

指定されたコレクションに表示されるデータをフィルタリングしたいので、埋め込みコレクション フォームの使用に問題があります。すなわち

<?php
Class Parent
{
    ... some attributes ...

    /**
     * @ORM\OneToMany(targetEntity="Child", mappedBy="parent", cascade={"all"})
     */
     private $children;

    ... some setters & getters ...

}

Class Child
{
    private $attribute1;

    private $attribute2;

    /**
     * @ORM\ManyToOne(targetEntity="Parent", inversedBy="children")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
     */
     private $parent;

     ... some setters & getters ...
}

次に、次を使用してフォームを作成します。

class ParentChildType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
        ->add('children', 'collection', array(
            'type' => ChildrenType(),
            'allow_add' => true,
        ));
    }
}
...
On controller:

    $parent = $this->getDoctrine()->getEntityManager()->getRepository('AcmeBundle:Parent')->find( $id );
    $forms = $this->createForm( new ParentChildType(), $parent)->createView();

    and then..

    return array('forms' => $forms->crateView());

私の問題は、コレクションをモデル クラス$attribute1またはモデル クラスでフィルター処理する場合です。$attribute2Child

このコレクション フォームの条件でフィルター処理する方法はありますか?

4

2 に答える 2

4

CreateQuery を使用する前にオブジェクトをフィルタリングしてから、このフィルタリングされたオブジェクトを使用してフォームを作成する必要があるようです。このような:

$parent = $this->getDoctrine()->getEntityManager()->createQuery("
            SELECT p, c 
            FROM AcmeBundle:Parent p
            JOIN p.children c
            WHERE c.attribute1 = :attr1
              AND c.attribute2 = :attr2
           ")
           ->setParameter('attr1', <some_value>)
           ->setParameter('attr2', <some_value>)
           ->getOneOrNullResult();
$forms = $this->createForm( new ParentChildType(), $parent)->createView();
....
return array('forms' => $form->createView());           
于 2012-05-03T17:03:35.677 に答える
0

私はあなたを正しい方向に向けます(願っています):

http://www.craftitonline.com/2011/08/symfony2-ajax-form-republish/

この記事では、フィールドの依存関係について説明します。たとえば、国を選択すると、その国に属する町がリストに表示されます。

それはあなたの問題のようです

于 2012-05-03T11:59:37.710 に答える