订购Symfony2系列

时间:2015-05-26 05:55:03

标签: symfony sorting

我有\Doctrine\Common\Collections\Collection个对象

不进行foreach循环并将其放入数组中,然后执行usort - 有什么方法可以按每个对象$obj->getName()递增来命令该集合?

3 个答案:

答案 0 :(得分:1)

为此目的使用Doctrine内置注释

/**
 * @ORM\OneToMany(targetEntity="AnEntity", mappedBy="someVar")
 * @ORM\OrderBy({"aField" = "ASC"})
 *
 * @var ArrayCollection
 */
private $aCollection;

API参考:http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html#annref-orderby

答案 1 :(得分:0)

没有别的办法。

但是如果您从DB检索您的集合,您可以使用ORDER BY语句请求数据,您将获得相同的结果。

答案 2 :(得分:0)

我看到了3种可能的方法。您选择哪一个取决于您如何检索数据,以及您希望从中获取哪种行为。

您构建一个sql查询来检索实体

在这种情况下,您将使用ORDER BY语句进行查询。

您检索的实体与其他实体有关系,应始终按此方式排序

这是ihsan已经回答的问题:

  

为此目的使用Doctrine内置注释

     

/** * @ORM\OneToMany(targetEntity="AnEntity", mappedBy="someVar") * @ORM\OrderBy({"aField" = "ASC"}) * * @var ArrayCollection */ private $aCollection;

     

API参考:http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html#annref-orderby

您只有一个集合,和/或想要以特定方式对其进行排序

对于这种情况,您可以使用Criteria' s。根据文档,如果集合仍在数据库中或内存中,它可能会使用SQL或PHP对其进行排序。这是一种延迟加载的机制。不要问细节。

$criteria = Criteria::create();
$criteria->orderBy(array('column' => 'ASC'));

$sortedItems = $items->matching($criteria);

您可以在此处阅读有关条件的更多信息: http://doctrine-orm.readthedocs.org/en/latest/reference/working-with-associations.html#filtering-collections