3

私は Symfony 2 を初めて使用し、外部キーを持つコンテンツ タイプのフォームを作成しようとしています。フォームを使用して外部キーを保存する方法がわかりません。

私の 2 つのテーブルは「カテゴリ」と「質問」です。質問は 1 つのカテゴリに属します (多対 1)。したがって、エンティティの Question.php ファイルには次のものが含まれます。

<?php

namespace Iel\CategorieBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Question
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Iel\CategorieBundle\Entity\QuestionRepository")
 */
class Question
{
    /**
    * @ORM\ManyToOne(targetEntity="Iel\CategorieBundle\Entity\Categorie")
    * @ORM\JoinColumn(nullable=false)
    */
    private $categorie;
    /**
    * Set categorie
    *
    @param Iel\CategorieBundle\Entity\Categorie $categorie
    */
    public function setCategorie(\Iel\CategorieBundle\Entity\Categorie $categorie)
    {
        $this->categorie = $categorie;
    }
    /**
    * Get categorie
    *
    @return Iel\CategorieBundle\Entity\Categorie
    */
    public function getCategorie()
    {
        return $this->categorie;
    }

私はこのようにコントローラ関数を構築しようとしましたが、それは正しい構文ではありません:

public function addquestionAction()
{
    $question = new Question;

    $form = $this->createFormBuilder($question)
        ->add('titre', 'text')
        ->add('auteur', 'text')
        ->add('contenu', 'textarea')
        ->add('category_id', $this->getCategorie())    
        ->getForm();    

    $request = $this->get('request');

このフォームを使用して、質問のテーブルに現在の category_id を書き込む方法がわかりません。

4

2 に答える 2

8

より良い方法は、タイプ「エンティティ」の「カテゴリ」を宣言することです。このようなもの:

$form = $this->createFormBuilder($question)
    ->add('titre', 'text')
    ->add('auteur', 'text')
    ->add('contenu', 'textarea')
    ->add('category', 'entity', array(
        'class' => 'IelCategorieBundle:Categorie',
        'property' => 'name',
    ))
    ->getForm();

これにより、オプション値がカテゴリ ID であり、オプション表示値がカテゴリ名である選択が作成されます。$question オブジェクトを永続化すると、"questions" テーブルの外部キー フィールドにカテゴリ ID が挿入されます。

于 2014-03-22T17:49:20.847 に答える
2

categorieの代わりに試してくださいcategory_id。Doctrine と SF2 フォームは、外部キーではなく関連付けで機能します。

また$this->getCategorie()、動作しません。あなたはコントローラーのコンテキストにいます。Questionこの代わりに、マッピング ファイルに基づいて型を推測するフォームを残します。

/* ... */
$form = $this->createFormBuilder($question)
    ->add('titre', 'text')
    ->add('auteur', 'text')
    ->add('contenu', 'textarea')
    ->add('categorie', null)    
    ->getForm(); 
/* ... */
于 2013-10-31T15:32:42.853 に答える