Je veux obtenir un tableau de valeurs de la colonne id de la table d'enchères. Si c'était un SQL brut, j'écrirais:
SELECT id FROM auction
Mais quand je fais cela dans Doctrine et que j'exécute:
$em->createQuery("SELECT a.id FROM Auction a")->getScalarResult();
Je reçois un tableau comme celui-ci:
array(
array('id' => 1),
array('id' => 2),
)
Au lieu de cela, j'aimerais obtenir un tableau comme celui-ci:
array(
1,
2
)
Comment puis-je faire cela en utilisant Doctrine?
php
doctrine-orm
Dawid Ohia
la source
la source
Depuis PHP 5.5, vous pouvez utiliser array_column pour résoudre ce problème
la source
Une meilleure solution consiste à utiliser
PDO:FETCH_COLUMN
. Pour ce faire, vous avez besoin d'un hydrateur personnalisé:Ajoutez-le à Doctrine:
Et vous pouvez l'utiliser comme ceci:
Plus d'infos: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#custom-hydration-modes
la source
La réponse d'Ascarius est élégante, mais méfiez-vous de l'utilisation de la mémoire!
array_map()
crée une copie du tableau passé et double efficacement l'utilisation de la mémoire. Si vous travaillez avec des centaines de milliers d'éléments de tableau, cela peut devenir un problème. Depuis PHP 5.4, le passage par référence a été supprimé, vous ne pouvez donc pas le faireDans ce cas, vous pouvez aller avec
la source
Je pense que c'est impossible dans Doctrine. Transformez simplement le tableau de résultats dans la structure de données souhaitée en utilisant PHP:
la source