1

これはエンティティです:

class MyEntity {
    /**
     * @var \OtherEntity
     *
     * @ORM\ManyToOne(targetEntity="OtherEntity")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="otherentity_id", referencedColumnName="id")
     * })
     */
    private $otherentity;

   // some other fields
}

私のControllerのアクション:

someAction(Request $request) {
    $em = $this->getDoctrine()->getEntityManager();
    // simplified this step here with id=5, so that all Entities of class MyEntity a link to the OtherEntity with ID=5 
    $otherEntity = $this->getDoctrine()->getRepository('MyTestBundle:OtherEntity')->find(5);

    $myEntity = new MyEntity();
    $myEntity->setOtherEntity($otherEntity);

    $form = $this->createForm(new MyEntityType(), $myEntity);
    // do some form stuff like isValid, isMethod('POST') etc.
}

これはFormtypeです:

class MyEntityType extends AbstractType {
    public function buildForm(FormBuilderInterface $builder, array $options) {
        parent::buildForm($builder, $options);
        $builder->add('name', 'text');
        // HOW TO ADD THE ENTITY TO JOIN THE ADDED MyEntity with the OtherEntity (with ID=5)?
       // i tried this:
       ->add('otherentity', 'entity',
           array('class' => 'My\MyTestBundle\Entity\OtherEntity',
                  'read_only' => true,
                  'property' => 'id',
                  'query_builder' => function (
                \Doctrine\ORM\EntityRepository $repository) {
               return $repository->createQueryBuilder('o')
                           ->where('o.id = ?1')
                       ->setParameter(1, 5);
    }
)

) // ... その他のフィールド } // 標準の formtype メソッドなど }

だから私の質問は、 $builder->add で otherEntity を追加するために何を選択する必要があるかということです$em->persist($myEntity)。コントローラー内でフォームを介して追加された myEntity を永続化すると、データベースにこのようなレコードが作成されます。 :

id | name   | otherentity_id
1  | 'test' | 5

: 新しい otherEntity を永続化するのではなく、新しい MyEntity を作成して、OtherEntity の外部キーを追加したいだけです。

4

1 に答える 1

6

次のようにEntity フォーム タイプを使用することはできません。

$builder->add('otherentity', 'entity', array(
    'class' => 'MyTestBundle:OtherEntity'
));
于 2013-05-14T21:45:59.747 に答える