排序我有两块彼此相关型号: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()
。现在我想在查询中使用这个值进行排序。
我已经试过类似的东西(DQL查询):
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
它说:
[Syntax Error] line 0, col 50: Error: Expected known function, got 'count'
任何想法? :)
谢谢。
似乎工作,我只需要添加'GROUP BY a.id'。 ;)这是DQL查询我结束了:'选择一个,COUNT(b.id)AS keyNumber FROM的appbundle:产品一INNER JOIN a.keys B组BY a.id ORDER BY keyNumber ASC'。由于一些奇怪的原因,这是行不通的:'SELECT a FROM AppBundle:Product a INNER JOIN a.keys b GROUP BY a.id ORDER BY COUNT(b.id)ASC' – saitho
我很高兴它为你工作。 DQL不像SQL那么先进,所以我认为order by子句中的函数没有实现(还没有?)。 – Stepashka