validator type now new datetype component php doctrine symfony

php - type - symfony datetime now



Symfony2 datetime queryBuilder (3)

La respuesta de Benjamin es correcta, pero le falta un detalle. Esta es la forma correcta de hacerlo:

$qb->andWhere($qb->expr()->between(''s.date'', '':date_from'', '':date_to''));

Pero para establecer parámetros, necesito hacer esto:

$qb->setParameter(''date_from'', $date_from, /Doctrine/DBAL/Types/Type::DATETIME); $qb->setParameter(''date_to'', $date_to, /Doctrine/DBAL/Types/Type::DATETIME);

Si omito los tipos DATETIME, obtengo el siguiente error (vea here ):

Objeto de la clase DateTime no se pudo convertir a cadena

Estoy usando Doctrine DBAL 2.0.5, este comportamiento podría haber cambiado en versiones posteriores de Doctrine.

Tengo 2 clases de DateTime en el proyecto Symfony2. Tengo entidad Stat , en la que tengo propiedad $ date .

/** * @ORM/Column(type="date", length="11") */ protected $date;

Tengo que hacer consultas usando objetos DateTime en createQueryBuilder . Cómo puedo hacer eso ? Por ejemplo:

$date_from = new DateTime(''2012-02-01''); $date_to = new DateTime(''2012-02-15'');

Necesito obtener todas las filas de las estadísticas de la tabla (entidad Stat ) entre $ date_from y $ date_to. ¿Cómo debo escribir mi consulta con createQueryBuilder? Mi código actual es:

$qb = $em->createQueryBuilder(); $query = $qb->select(''s'') ->from(''ACME/MyBundle/Entity/Stat'', ''s'') ->where(''s.date >= :date_from'') ->andWhere(''s.date <= :date_to'') ->setParameter(''date_from'', $date_from) ->setParameter(''date_to'', $date_to) ->getQuery();


Tuve una situación similar. No pude usar -> setParameter debido a cómo se construyó mi código, así que puse esta variable $ yX para "capturar" todas las condiciones encontradas en el bucle foreach (en este caso, solo escribí una con las fechas porque otras no relevante en este momento).

$this->qb = $this->em->createQueryBuilder(); $andX = $this->qb->expr()->andX(); $this->qb->select(''u'') ->from(''models/User'',''u''); foreach($data as $key=>&$value){ if($key == ''date''){ $from = $this->qb->expr()->gte(''u.date_from'',$this->qb->expr()->literal($value[''datefrom''])); $to = $this->qb->expr()->lte(''u.date_to'',$this->qb->expr()->literal($value[''dateto''])); $condition = $from. '' AND '' .$to; $andX->add($condition); } //other if }

Observe que el parámetro para esta función es una matriz multidimensional. Espero que esto sea de ayuda.


Un QueryBuilder es una buena solución.

Pero puedes usar

->andWhere($qb->expr()->between(''s.date'', '':date_from'', ''date_to''))

o

->andWhere($qb->expr()->andX(array( $qb->expr()->gte(''s.date'', '':date_from''), $qb->expr()->lte(''s.date'', '':date_to'')) )

El $ qb-> expr () -> yX es útil si no desea tener algo de WTF cuando agrega algunos yWhere o or Where.

Aquí tienes la documentación de doctrine2 para queryBuilder.

También puedes usar el método setParameters para tus parámetros

->setParameters(array( ''date_from'' => $date_from, ''date_to'' => $date_to, ))