我无法按属性从另一个实体订购记录。
我有 Employee 类,它具有 $user 属性,它指向 User 类,它具有 $active 属性。
现在我想按user.active对 Employee 进行排序,但我无法做到这一点。这就是我所说的em:
/**
* @param Criteria $criteria
* @param array $order_by
* @param integer $limit
* @param integer $offset
* @return \Doctrine\Common\Collections\Collection
*/
public function findByCriteria($criteria, $order_by = null, $limit = null, $offset = null) {
$criteria->setFirstResult($offset);
$criteria->setMaxResults($limit);
$criteria->orderBy($order_by);
$result = $this->repository->matching($criteria);
return $result;
}
我检查了 BaseEntityPersister.php ,似乎没有实现这样的事情。它只是检查 user.active 是否是 Employee 类的属性并抛出
Doctrine\ORM\ORMException
Unrecognized field: user.active
我知道我可以通过 QueryBuilder 和连接来做到这一点,但我想让我的代码更可重用,并且 Criteria 似乎是一个不错的选择。
感谢您的建议!
编辑:
如果我使用findBy ,排序字段user.active没有问题。我应该认为这是匹配方法的限制吗?很难过,因为我需要使用 Doctrine\Common\Collections\Criteria。我可以将findBy与 order 一起使用,然后使用匹配方法来过滤记录,但我宁愿在数据库端这样做。
编辑2:
我将 Nette 与 Kdyby/Doctrine 一起使用。不知道 user.active 是在 Kdyby/doctrine 中实现的,而不是直接在 Doctrine 中实现的。所以我想这个问题不会回答..