2016-12-28 14 views
0

を並べ替える私は相互に関連している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' 

アイデア:)

ありがとうございました。

答えて

1

あなたはできるだけ早くCOUNT()は(あなたが明示的にキーテーブルに参加し、その中に何かを頼りにすることができ、単一の値フィールドを期待して、このようなもの(単なるアイデアではなく、検証コード)

SELECT a, COUNT(b.id) AS keyNumber FROM AppBundle:Product a JOIN a.keys b ORDER BY keyNumber ASC; 

をやって試すことができます私はそれがIDを持っていると思うか、あなたはそこにあるものを使うことができます)。

+0

うまくいくように見えますが、私は '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

+0

それはあなたのために働いてうれしい。 DQLはSQLほど進んでいないので、order節の関数の場合は実装されていないと思います(まだですか?)。 – Stepashka

0

複合キーと関係があるのだろうか?私はそれについて何かを読んだ。私はあなたの主要な識別子が何であるかはわかりませんが、私は下にa.idと表示しています。あなたはこれを試すことができます。製品を、最後にセミコロンを処分した:

SELECT IDENTITY(a.id), a, COUNT(a.keys) AS keyNumber FROM AppBundle:Product a ORDER BY keyNumber ASC 

注意を、私は単純にAppBundleにAppBundle \エンティティ\製品を削減しました。

それが機能するかどうかを教えてください。

+0

いいえ、動作しません。 :/ '[意味的なエラー]行0、列18の 'id'、a、COUNT(a.keys) ':エラー:無効なPathExpression。 SingleValuedAssociationFieldでなければなりません。 "しかし、あなたの答えに感謝します。 :) – saitho

関連する問題