2014-01-05 31 views
3

我有錯誤,當我嘗試保存簡單的形式,而在執行「INSERT INTO mEvents(保存實體形式的錯誤 - Symfony2的

錯誤 出現異常的標題,說明,dateTimeStart,dateTimeEnd,visibleFrom,visibleTo,timetype,LOCATIONNAME, miejsce)用參數[「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「,」dfgfg「,null]:

SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法錯誤;檢查對應於你的MySQL服務器版本在線路附近使用「遞減,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()]; 

} 

回答

4

desc是MySQL中的保留關鍵字。你應該重命名這個屬性。

編輯,

即使教義允許您通過逃脫他們使用的關鍵字。我會建議你重新命名你的財產(最佳做法),以避免混淆。

+0

不應該這樣做自動嗎? **編輯**:研究了一下,找到了我在答案中提到的內容。 –

+1

我認爲最好是正確地重新命名,以避免任何混淆,但教條允許您使用關鍵字(通過轉義它們)。 –

+0

@MarkusKottländer好吧,我只是看着你的答案。 +1「最佳實踐」建議。 –

4

如果你想使用一個保留關鍵字(DESC)作爲列名,你應該逃避它:

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

但是,最好的做法是不使用保留關鍵字。

+0

是的。但是,真的:*不*。你很容易導致自己的某種痛苦,進一步下降。重命名該列。 –