2010-08-17 24 views
11

Non riesco a eseguire una Query DQL di Doctrine. Questo è l'errore che mi dà.Doctrine 2 PlainValue expected

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

Il mio codice è simile al seguente:

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

Dove $ id è il session_id corrente. Il mio modello si presenta come:

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; 
} 

risposta

21

Hai due errori in questo:

  1. Bisogna citare le annotazioni, cioè @Column (type = "integer") non @Colunn (type = intero) . Doctrine \ Common \ Annotations \ AnnotationException viene generato quando la mappatura è errata. Questo non ha nulla a che fare con la query.
  2. Vostri criteri dovrebbero utilizzare le istruzioni preparate, vale a dire

    $ query = $ em-> createQuery ("SELECT s dalla base \ Session s DOVE s.session = 1?"); $ query-> setParameter (1, $ id);

+0

Grazie. Il primo errore è stata la soluzione. Conoscevo già il tuo secondo punto. Ho appena provato così tante cose che ho finito con questa riga di codice in cui ho dimenticato di usare la dichiarazione preparata. Molte grazie! –

+5

Come commento aggiuntivo al numero 1, le virgolette singole non funzionano, devono essere doppie virgolette – Shawn