Eu quero obter uma matriz de valores da coluna id da tabela Leilão. Se este fosse um SQL bruto, eu escreveria:
SELECT id FROM auction
Mas quando eu faço isso no Doctrine e executo:
$em->createQuery("SELECT a.id FROM Auction a")->getScalarResult();
Recebo uma matriz como esta:
array(
array('id' => 1),
array('id' => 2),
)
Em vez disso, gostaria de obter uma matriz como esta:
array(
1,
2
)
Como posso fazer isso usando o Doctrine?
php
doctrine-orm
Dawid Ohia
fonte
fonte
A partir do PHP 5.5, você pode usar array_column para resolver isso
fonte
A melhor solução é usar
PDO:FETCH_COLUMN
. Para fazer isso, você precisa de um hidratante personalizado:Adicione ao Doctrine:
E você pode usá-lo assim:
Mais informações: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#custom-hydration-modes
fonte
A resposta de Ascarius é elegante, mas cuidado com o uso de memória!
array_map()
cria uma cópia do array passado e dobra efetivamente o uso de memória. Se você trabalhar com centenas de milhares de itens de matriz, isso pode se tornar um problema. Uma vez que a passagem por referência de tempo de chamada do PHP 5.4 foi removida, você não podeNesse caso, você pode ir com o óbvio
fonte
Acho que é impossível na Doutrina. Basta transformar a matriz de resultados na estrutura de dados desejada usando PHP:
fonte