2010-08-17 5 views
11

J'ai des problèmes pour exécuter une requête Doctrine DQL. C'est l'erreur que cela me donne.Doctrine 2 PlainValue attendu

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

Mon code ressemble à ceci:

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

Où $ id est le session_id actuel. Mon modèle ressemble à:

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

Répondre

21

Vous avez deux erreurs dans ce:

  1. Vous devez citer vos annotations, à savoir @Column (type = "entier") non @Colunn (type = entier) . Doctrine \ Common \ Annotations \ AnnotationException est levée lorsque votre mappage est incorrect. Cela n'a rien à voir avec la requête.
  2. Votre requête doit utiliser des instructions préparées, à savoir

    $ query = $ em-> CreateQuery ("SELECT s de la base \ Session Où le s.session = 1?"); $ query-> setParameter (1, $ id);

+0

Merci. La première erreur était la solution. Je connaissais déjà ton deuxième point. Juste essayé tant de choses que j'ai fini avec cette ligne de code dans laquelle j'ai oublié d'utiliser la déclaration préparée. Merci beaucoup! –

+5

Comme un commentaire supplémentaire à # 1, les guillemets simples ne fonctionnent pas non plus, doivent être des guillemets doubles – Shawn

Questions connexes