Ich habe zwei Modelle, die miteinander verwandt sind:Symfony 3/Lehre: Sortierung nach nicht-persistent Spalten
class Product
{
//...
/**
* @var Collection<Key>
* One Product has Many Keys.
* @ORM\OneToMany(targetEntity="Key", mappedBy="product")
*/
private $keys;
public function getKeyNumber()
{
return count($this->keys);
}
//...
}
class Key
{
//...
/**
* @var Product
*
* Many Keys have One Product.
* @ORM\ManyToOne(targetEntity="Product", inversedBy="keys")
* @ORM\JoinColumn(referencedColumnName="id")
*/
private $product;
/**
* @var int
* @ORM\Column(type="integer")
*/
private $product_id;
//...
}
Ich bin in der Lage, die Anzahl der Tasten mit Product::getKeyNumber()
zu bekommen. Jetzt möchte ich diesen Wert zum Sortieren in der Abfrage verwenden.
Ich habe versucht, so etwas wie, dass (DQL Query):
SELECT a, COUNT(a.keys) AS keyNumber FROM AppBundle\Entity\Product a ORDER BY keyNumber ASC;
, die zurückgibt:
[Semantical Error] line 0, col 18 near 'keys) AS keyNumber': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.
Wenn ich versuche:
SELECT a FROM AppBundle\Entity\Product a ORDER BY count(a.keys) ASC
heißt es:
[Syntax Error] line 0, col 50: Error: Expected known function, got 'count'
Irgendwelche Ideen? :)
Danke.
Scheint zu arbeiten, ich musste nur hinzufügen "GROUP BY a.id". ;) Dies ist die DQL-Abfrage, mit der ich endete: 'SELECT a, COUNT (b.id) AS Schlüsselnummer FROM AppBundle: Produkt a INNER JOIN a.schlüssel b GROUP BY a.id ORDER BY Schlüsselzahl ASC'. Aus irgendeinem seltsamen Grund funktioniert das nicht: 'SELECT a FROM AppBundle: Produkt a INNER JOIN a.Tasten b GROUP BY a.ID ORDER BY COUNT (b.id) ASC' – saitho
Ich bin froh, dass es für Sie gearbeitet hat. Die DQL ist nicht so fortgeschritten wie SQL, daher denke ich, dass der Fall mit der Funktion in der Order-Klausel nicht implementiert ist (noch?). – Stepashka