¿Es posible usar index by con el generador de consultas de doctrine 2 y, de ser así, cuál es la sintaxis correcta?Creador de consultas de Doctrine 2 e índice por
Respuesta
Aquí hay una solución al utilizar QueryBuilder, mediante inyección manual del índice en la cláusula -
(do you querybuilder statement)
$q = $q->getQuery()->setDQL(str_replace('WHERE', 'INDEX BY yourIndexValue WHERE', $q->getDQL()));
Esto parece funcionar para mí ...
Sí, eso es posible, utilizando el generador de consultas. Un pequeño ejemplo, supongamos que queremos indexar por t.someField. Mira el tercer argumento desde el método.
<?php
$query = $em->createQueryBuilder()
->select('t.somefield', 't.someOtherField')
->setFrom('Entity\Table', 't', 't.someField')
->getQuery()
$results = $query->getArrayResult();
//your result will look something like:
$results['somefieldvalue'] = array(array('somefield' => 'value', 'someOtherField' => 'test'));
?>
Esto debería funcionar en Doctrine 2.1 como mínimo. En Doctrine 2.0 aún no es compatible. En Doctrine 2.0 solo se admite cuando lo especifica con DQL.
Con Doctrine 2.1.0-DEV, uso '$ qb-> add ('from', 'Entity \ Table t INDEX BY t.id');' – Maxence
Para una actualización. Puedes hacer algo como esto.
$qb = $entityManager->createQueryBuilder();
$qb->from($repository->getClassName(), 'a', 'a.id');
$qb->select(a);
$result = new ArrayCollection($qb->getQuery()->getResult());
Como resultado, la colección de arreglos contendrá los elementos correctamente indexados.
A partir de 2.2, ahora puede incluir INDEX BY en su declaración de. Si va a añadir una cláusula FROM,
$qb->from($class, $alias, $indexBy);
Si ya tiene una cláusula FROM que desea reemplazar, entonces se puede sustituir con:
$qb->add('from', new Expr\From($class, $alias, $indexBy), false);
Hay una solicitud de extracción abierta para agregarlo a la función createQueryBuilder del Repositorio también, así que espero que esto se agregue pronto.
Esta debería ser la respuesta correcta. – imclickingmaniac
Hola, escribo desde 2015, y todavía no está allí :-( – zerkms
Se rechazó ... https://github.com/doctrine/doctrine2/pull/592 – cmenning
También puede usar un INDICE POR predeterminado de una clave externa, p. "YourIndexValue_id" directamente en su asignación:
/**
* @ORM\OneToMany(targetEntity="Bar", mappedBy="foo", indexBy="bar_id")
*/
protected $bars;
Por desgracia, no parece ser documentado que usted tiene que utilizar el nombre de la columna de la propia clave externa.
La sintaxis correcta y la más simple sería:
$enityManager->getRepository('AppBundle:Entity')->createQueryBuilder('entity', 'entity.name')->getQuery()->getResult();
Esto haría índice el resultado por el campo Nombre de la entidad.
- 1. Generador de consultas Regex con Doctrine 2?
- 2. Creador de consultas SQL
- 3. Creador de consultas de Drupal
- 4. Creador de consultas PHP MySQL
- 5. Subconsulta de Doctrine 2
- 6. Validación de Doctrine 2
- 7. Doctrina 2 Generador de consultas
- 8. Doctrine 2 con índices múltiples
- 9. Symfony 2 + herencia de Doctrine 2 +
- 10. Constructor de consultas Doctrine: error semántico
- 11. Doctrine 2 Cerrar conexión
- 12. Doctrine 2 optimización extrema
- 13. Establecer LIMIT con doctrine 2?
- 14. Doctrine 2, query inside entities
- 15. Doctrine 2 Value Objects
- 16. Doctrine 2 ManyToMany cascade
- 17. Doctrine 2 PlainValue expected
- 18. Zend 2 + doctrine 2 Auth Adapter
- 19. Symfony2, Doctrine 2: Objeto getResult
- 20. Anotaciones de Doctrine 2 y "var"
- 21. Doctrine 2 multinivel OneToOne Cascade
- 22. Doctrine 2 Método de filtro ArrayCollection
- 23. Doctrine 2. Auto generación de proxies
- 24. Doctrine 2 conexiones Maestro/Esclavo
- 25. Extensión GIS para Doctrine 2
- 26. Doctrine 2 SUM() Ayudante equivalente?
- 27. Configuración de Doctrine 2 con MySQL
- 28. Symfony 2 Exportación de Doctrine a JSON
- 29. Comprobación de llaves duplicadas con Doctrine 2
- 30. Doctrine 2, método de entidad indefinido findOneBy *
Me doy cuenta de que esta es una respuesta muy antigua, pero solo quisiera señalar que esto no funcionará para las consultas que no tienen ninguna cláusula WHERE. – rpkamp