我尝试保存简单表单时出错
错误 执行' 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()];
}
答案 0 :(得分:4)
desc
是MySQL中的保留关键字。然后,您应该重命名此属性。
修改,强>
即使Doctrine允许您通过转义关键字来使用关键字。我会建议你重命名你的财产(一种最佳做法),以避免混淆。
答案 1 :(得分:4)
如果你想使用保留关键字(desc)作为列名,你应该将其转义:
/**
* @var string
* @ORM\Column(name="`desc`", type="string", nullable=true)
*/
protected $desc;
但最佳做法是不使用保留关键字。