2010-08-17 13 views
11

Ich habe Probleme beim Ausführen einer Doctrine DQL Query. Das ist der Fehler, den es mir gibt.Doctrine 2 PlainValue erwartet

Doctrine\Common\Annotations\AnnotationException: [Syntax Error] Expected PlainValue, 
got 'integer' at position 13 in property Base\Session::$lifetime. 

Mein Code sieht wie folgt aus:

$query = $em->createQuery("SELECT s FROM Base\Session s WHERE s.session = \"$id\""); 

Wo $ id den aktuellen Sitzungs_ID ist. Mein Modell sieht so aus:

namespace Base; 

/** @Entity @Table(name="session") */ 
class Session extends Skeleton { 
/** 
* @Id @Column(type="integer") 
* @GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** @Column(length=32) */ 
protected $session; 

/** @Column(type=integer) */ 
protected $lifetime; 

/** @Column(type=integer) */ 
protected $modified; 

/** @Column(type="text") */ 
protected $data; 
} 

Antwort

21

Sie haben zwei Fehler in dieser:

  1. Sie haben Ihre Anmerkungen zu zitieren, dh @Column (type = "integer") nicht @Colunn (type = integer) . Doctrine \ Common \ Annotations \ AnnotationException wird ausgelöst, wenn Ihre Zuordnung falsch ist. Dies hat nichts mit der Query zu tun.
  2. Ihre Abfrage sollte vorbereitete Anweisungen verwenden, das heißt

    $ query = $ Ausführungs> Create ("SELECT s FROM Base \ Session s WHERE s.session = 1?"); $ query-> setParameter (1, $ id);

+0

Danke. Der erste Fehler war die Lösung. Ich kannte deinen zweiten Punkt bereits. Habe gerade so viele Dinge ausprobiert, dass ich mit dieser Codezeile gelandet bin, in der ich vergessen habe, die vorbereitete Aussage zu verwenden. Danke vielmals! –

+5

Als ein zusätzlicher Kommentar zu # 1, funktionieren auch einfache Anführungszeichen nicht, müssen doppelte Anführungszeichen sein – Shawn

Verwandte Themen