【发布时间】:2018-05-27 09:10:29
【问题描述】:
我无法按属性从另一个实体订购记录。
我有 Employee 类,它有 $user 属性,它指向 User 类,它有 $active 属性。
现在我想按 user.active 对员工进行排序,但我无法做到。这就是我对 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 没有问题。我应该认为这是 matching 方法的限制吗?很难过,因为我需要使用 Doctrine\Common\Collections\Criteria。我可以使用 findBy 和 order 然后使用 matching 方法来过滤记录,但我宁愿在数据库端这样做。
编辑 2:
我将 Nette 与 Kdyby/Doctrine 一起使用。不知道 user.active 是在 Kdyby/doctrine 中实现的,而不是直接在 Doctrine 中实现的。所以我想这个问题不会得到回答..
【问题讨论】: