保存实体表单错误 - symfony2

时间:2014-01-05 10:14:40

标签: php forms symfony

我尝试保存简单表单时出错

错误  执行' INSERT INTO mEvents(title,desc,dateTimeStart,dateTimeEnd,visibleFrom,visibleTo,timetype,locationName,miejsce)VALUES(?,?,?,?,?,?,?,?,? )'与params [" sdfsdf"," sd"," 2014-01-05 11:11:31"," 2014-01-05 11: 11:31"," 2014-01-05 00:00:00"," 2014-01-05 00:00:00"," 435&#34 ;," dfgfg",null]:

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与MySQL服务器版本对应的手册,以便在#des;,dateTimeStart,dateTimeEnd,visibleFrom,visibleTo,timetype,locationName'附近使用正确的语法。在第1行 500内部服务器错误 - DBALException 1个链接异常:

实体:

/**
 * CalendarEvent
 * @ORM\Entity
 * @ORM\Table(name="mEvents", indexes={
@ORM\Index(name="id", columns={"id"})
,@ORM\Index(name="time", columns={"dateTimeStart","dateTimeEnd"})
})
 */
class Event {

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

    /**
     * @var string
     * @ORM\Column(type="string", nullable=true)
     */
    protected $title;

    /**
     * @var string
     * @ORM\Column(type="string", nullable=true)
     */
    protected $desc;

    /**
     * event start time
     * @var int
     * @ORM\Column(type="datetime")
     */
    protected $dateTimeStart;

    /**
     * event end time
     * @var int
     * @ORM\Column(type="datetime")
     */
    protected $dateTimeEnd;

    /**
     * @var int
     * @ORM\Column(type="datetime")
     */
    protected $visibleFrom;


    /**
     * @var int
     * @ORM\Column(type="datetime")
     */
    protected $visibleTo;


    /**
     * 1 jednodniowe, 2wielodniowe, 3 cykliczne, 4 zakresowe
     * @var int
     * @ORM\Column(type="smallint", length=2, nullable=true)
     */
    protected $timetype;

    /**
     * Nazwa miejsca
     * @var string
     * @ORM\Column(type="string", nullable=true)
     */
    protected $locationName;

    /**
     * miejsce
     * @ORM\Column(type="integer", nullable=true)
     * @ORM\ManyToOne(targetEntity="Miejsce",inversedBy="events")
     * @ORM\JoinColumn(referencedColumnName="id")
     */
    protected $miejsce;

表格:

 /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {


        $builder
            ->add('title', 'text')
            ->add('desc', 'text')
            ->add('dateTimeStart', 'datetime',array(
                'format' => \IntlDateFormatter::SHORT,
                'input' => 'datetime',
                'widget' => 'single_text',
                'data' => new \DateTime("now")))
            ->add('dateTimeEnd', 'datetime',array(
                'format' => \IntlDateFormatter::SHORT,
                'input' => 'datetime',
                'widget' => 'single_text',
                'data' => new \DateTime("now")))
            ->add('visibleFrom', 'date',array(
                'input' => 'datetime',
                'data' => new \DateTime("now")))
            ->add('visibleTo', 'date',array(
            'input' => 'datetime',
            'data' => new \DateTime("now")))
            ->add('timetype', 'text')
            ->add('locationName', 'text')
            //->add('textadres', 'places_autocomplete')

            //->add('mkeywordsId', 'text')

            ->add('save', 'submit')
        ;
    }

控制器编辑操作

/**
 * @Template
 * @param string $id
 * @return Response
 */
public function EditAddAction($id='')
{




    /**
     * @var $hotel Mmiejsce
     */
    if($id)
        $entity = $this->getDoctrine()
            ->getRepository('MiejsceCalendarBundle:Event')
            ->find($id);
    else
        $entity = new Event();



    $form = $this->createForm(new EventType(), $entity);

    $request = $this->getRequest();

    $form->handleRequest($request);

    if ($form->isValid()) {

        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();

    }

    return ['form'=>$form->createView()];

}

2 个答案:

答案 0 :(得分:4)

desc是MySQL中的保留关键字。然后,您应该重命名此属性。

修改,

即使Doctrine允许您通过转义关键字来使用关键字。我会建议你重命名你的财产(一种最佳做法),以避免混淆。

答案 1 :(得分:4)

如果你想使用保留关键字(desc)作为列名,你应该将其转义:

/**
 * @var string
 * @ORM\Column(name="`desc`", type="string", nullable=true)
 */
protected $desc;

但最佳做法是不使用保留关键字。