を並べ替える私は相互に関連している2つのモデルがあります:symfonyの3 /ドクトリン:非永続列で
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;
//...
}
を私はProduct::getKeyNumber()
とキーの数を取得することができています。今、この値をクエリのソートに使用したいと思います。
SELECT a, COUNT(a.keys) AS keyNumber FROM AppBundle\Entity\Product a ORDER BY keyNumber ASC;
返します:
[Semantical Error] line 0, col 18 near 'keys) AS keyNumber': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.
は私がしようとすると:
SELECT a FROM AppBundle\Entity\Product a ORDER BY count(a.keys) ASC
それは言う:
私はその(DQLクエリ)のようなものを試してみた[Syntax Error] line 0, col 50: Error: Expected known function, got 'count'
アイデア:)
ありがとうございました。
うまくいくように見えますが、私は 'GROUP BY a.id'を追加するだけでした。 ;)これは私が終わったDQLクエリです: 'SELECT a、COUNT(b.id)AS keyNumber FROM AppBundle:プロダクトはINNER JOIN a.keys b GROUP BY a.id ORDER BY keyNumber ASC'です。いくつかの奇妙な理由で、これはうまくいかない: 'SELECT a FROM AppBundle:プロダクトa INNER JOIN a.keys b GROUP BY a.id ORDER BY COUNT(b.id)ASC' – saitho
それはあなたのために働いてうれしい。 DQLはSQLほど進んでいないので、order節の関数の場合は実装されていないと思います(まだですか?)。 – Stepashka