我有\Doctrine\Common\Collections\Collection
个对象
不进行foreach循环并将其放入数组中,然后执行usort - 有什么方法可以按每个对象$obj->getName()
递增来命令该集合?
答案 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