2010-08-17 19 views
11

Tengo problemas para ejecutar una consulta Doctrine DQL. Este es el error que me da.Doctrine 2 PlainValue expected

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

Mi código es el siguiente:

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

Donde $ id es el session_id actual. Mi modelo se parece a:

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

Respuesta

21

Tiene dos errores en este:

  1. Hay que citar sus anotaciones, es decir @Column (type = "entero") no @Colunn (tipo = entero) . Doctrine \ Common \ Annotations \ AnnotationException se lanza cuando su Mapeo es incorrecto. Esto no tiene nada que ver con la consulta.
  2. Su consulta debe utilizar declaraciones preparadas, es decir

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

+0

Gracias. El primer error fue la solución. Ya sabía tu segundo punto. Intenté tantas cosas que terminé con esta línea de código en la que olvidé usar la declaración preparada. ¡Muchas gracias! –

+5

Como un comentario adicional al # 1, las comillas simples tampoco funcionan, deben ser comillas dobles – Shawn