Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 条令:如何从与标准的关联中按属性排序_Php_Orm_Doctrine_Nette - Fatal编程技术网

Php 条令:如何从与标准的关联中按属性排序

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\

我无法按属性从其他实体排序记录

我有一个类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和联接来做到这一点,但我想让我的代码更具可重用性,而标准似乎是一个不错的选择

谢谢你的建议

编辑:

如果使用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,它自己处理过滤,所以这个问题对我来说不再重要了。无论如何,你的建议是正确的:)。