Chcę uzyskać tablicę wartości z kolumny id tabeli aukcji. Gdyby to był surowy SQL, napisałbym:
SELECT id FROM auction
Ale kiedy robię to w Doctrine i wykonuję:
$em->createQuery("SELECT a.id FROM Auction a")->getScalarResult();
Otrzymuję taką tablicę:
array(
array('id' => 1),
array('id' => 2),
)
Zamiast tego chciałbym uzyskać taką tablicę:
array(
1,
2
)
Jak mogę to zrobić za pomocą Doctrine?
php
doctrine-orm
Dawid Ohia
źródło
źródło
Od PHP 5.5 możesz użyć array_column do rozwiązania tego problemu
źródło
Lepszym rozwiązaniem jest użycie
PDO:FETCH_COLUMN
. Aby to zrobić, potrzebujesz niestandardowego hydratora:Dodaj to do Doctrine:
Możesz go używać w ten sposób:
Więcej informacji: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#custom-hydration-modes
źródło
Odpowiedź Ascariusa jest elegancka, ale uważaj na zużycie pamięci!
array_map()
tworzy kopię przekazanej tablicy i skutecznie podwaja użycie pamięci. Jeśli pracujesz z setkami tysięcy elementów tablicy, może to stanowić problem. Odkąd w PHP 5.4 przekazywanie czasu wywołania zostało usunięte, więc nie możesz tego zrobićW takim przypadku możesz wybrać oczywiste
źródło
Myślę, że w Doctrine to niemożliwe. Po prostu przekształć tablicę wyników w żądaną strukturę danych za pomocą PHP:
źródło