Php 条令:如何从与标准的关联中按属性排序
我无法按属性从其他实体排序记录 我有一个类Employee,它有$user属性,它指向类user,它有$active属性 现在我想按user.active对员工进行排序,但我无法这样做。这就是我对em的称呼:Php 条令:如何从与标准的关联中按属性排序,php,orm,doctrine,nette,Php,Orm,Doctrine,Nette,我无法按属性从其他实体排序记录 我有一个类Employee,它有$user属性,它指向类user,它有$active属性 现在我想按user.active对员工进行排序,但我无法这样做。这就是我对em的称呼: /** * @param Criteria $criteria * @param array $order_by * @param integer $limit * @param integer $offset * @return \Doctrine\Common\Collections\
/**
* @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和联接来做到这一点,但我想让我的代码更具可重用性,而标准似乎是一个不错的选择
谢谢你的建议
编辑:
如果使用findBy,排序字段user.active没有问题。我认为这是匹配方法的局限吗?很遗憾,因为我需要使用条令\公共\集合\标准。我可以使用findBy和order,然后使用matching方法过滤记录,但我更愿意在数据库端这样做
编辑2:
我将Nette与Kdyby/Doctrine一起使用。不知道user.active是在Kdyby/条令中实现的,而不是直接在条令中实现的。因此,我认为这个问题不会得到回答。如果您查看Kdyby/Doctrine,is通过自动检测关系并在需要时执行连接来扩展findBy功能,如您所见。 这就是为什么criteria不支持join,而Kdyby的findBy支持join的原因 如果您希望以可重用的方式构建条令查询,那么这些条件对您没有帮助,但是有一个QueryObject,它执行类似的工作,允许您使用QueryBuilder重用逻辑查询部分。 虽然没有很好的文档记录,但这里有一些资源: (来自幻灯片43)
谢谢你的回答。我已经开始使用Ublaboo/Datagrid,它自己处理过滤,所以这个问题对我来说不再重要了。无论如何,你的建议是正确的:)。