Ich möchte ein Array von Werten aus der ID-Spalte der Auktionstabelle abrufen. Wenn dies ein rohes SQL wäre, würde ich schreiben:
SELECT id FROM auction
Aber wenn ich dies in Lehre tue und ausführe:
$em->createQuery("SELECT a.id FROM Auction a")->getScalarResult();
Ich bekomme ein Array wie folgt:
array(
array('id' => 1),
array('id' => 2),
)
Stattdessen möchte ich ein Array wie dieses erhalten:
array(
1,
2
)
Wie kann ich das mit Doctrine machen?
php
doctrine-orm
Dawid Ohia
quelle
quelle
Ab PHP 5.5 können Sie array_column verwenden , um dies zu lösen
quelle
Eine bessere Lösung ist zu verwenden
PDO:FETCH_COLUMN
. Dazu benötigen Sie einen benutzerdefinierten Hydrator:Fügen Sie es der Lehre hinzu:
Und Sie können es so verwenden:
Weitere Informationen: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#custom-hydration-modes
quelle
Die Antwort von Ascarius ist elegant, aber Vorsicht vor der Speichernutzung!
array_map()
Erstellt eine Kopie des übergebenen Arrays und verdoppelt effektiv die Speichernutzung. Wenn Sie mit Hunderttausenden von Array-Elementen arbeiten, kann dies zu einem Problem werden. Da PHP 5.4 Call-Time-Pass-by-Reference entfernt wurde, können Sie dies nicht tunIn diesem Fall können Sie mit offensichtlich gehen
quelle
Ich denke, dass es in der Lehre unmöglich ist. Transformieren Sie einfach das Ergebnisarray mit PHP in die gewünschte Datenstruktur:
quelle