symfony表单实体更新

时间:2015-03-28 15:42:06

标签: forms symfony

我试图用实体创建一个for。

我的控制器:

$questionnaire = $em->getRepository('questionnaireBundle:questionnaire')->findOneBy(array('id' => $id));

        $form = $this->createForm(new questionnaireType(), $questionnaire);

QuestionnaireType:

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('nom', 'text', array('label' => 'Nom:'));
    $builder->add('nbreQuestions', 'text', array('label' => 'Nombre de questions:'));
    $builder->add('type', 'entity', array('class' => 'questionnaireBundle:type', 'property' => 'type'));
    $builder->add('envoyer', 'submit', array('label' => 'Enregistrer', 'attr' => array('class' => 'btn btn-success col-md-12')));
}

实体:问卷调查     

namespace questionnaireBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * questionnaire
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class questionnaire {

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=255)
     */
    private $nom;
    /**
     * @var string
     *
     * @ORM\Column(name="type", type="string", length=255)
     */
    private $type;

    /**
     * @var integer
     *
     * @ORM\Column(name="nbreQuestions", type="integer")
     *
     * @Assert\NotBlank(message="Veuillez entrer un nombre de questions.")
     * @Assert\Type(type="integer")
     */
    private $nbreQuestions;

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId() {
        return $this->id;
    }

    /**
     * Set nom
     *
     * @param string $nom
     * @return questionnaire
     */
    public function setNom($nom) {
        $this->nom = $nom;

        return $this;
    }

    /**
     * Get nom
     *
     * @return string 
     */
    public function getNom() {
        return $this->nom;
    }
    /**
     * Set type
     *
     * @param string $type
     * @return type
     */
    public function setType($type) {
        $this->type = $type;

        return $this;
    }

    /**
     * Get type
     *
     * @return string 
     */
    public function getType() {
        return $this->type;
    }

    /**
     * Set nbreQuestions
     *
     * @param integer $nbreQuestions
     * @return questionnaire
     */
    public function setNbreQuestions($nbreQuestions) {
        $this->nbreQuestions = $nbreQuestions;

        return $this;
    }

    /**
     * Get nbreQuestions
     *
     * @return integer 
     */
    public function getNbreQuestions() {
        return $this->nbreQuestions;
    }

    public function __toString() {
        return (string) $this->getNom();
    }

}

字段nom,nbreQuestions将自动完全与实体问卷调查,但类型不更新!

有谁知道为什么?

由于 最好的问候

2 个答案:

答案 0 :(得分:1)

必须在感觉背后进行第二次查询,但是你可以通过dql& amp;加入:

使用此代码:

$questionnaire = $em->createQuery('select q from questionnaireBundle:questionnaire q join q.type t where q.id = :id')->setParameter('id', $id)->getSingleResult();

$form = $this->createForm(new questionnaireType(), $questionnaire);

答案 1 :(得分:0)

未在for中选择正确类型的原因是实体类型将选项构建为

entity_id => property_value

因此,它将您的问卷调查类型的值与您的类型实体的ID进行比较,并且找不到匹配项。此外,如果您更新问卷调查对象,则类型将更改为类型实体的ID。

我在这里看到两个解决方案:

    @ghanbari提出的
  1. 从问卷调查到
  2. 的关系
  3. 将您的表单作为服务并注入entityManager,而不是像您想要的那样构建您的选择(type => type)并将字段从实体类型更改为选择类型