Model view controller Symfony2最佳实践-实体排序
我正在Symfony2中创建一个应用程序。这是我第一次使用框架进行开发,也是我的第一个项目之一。这是一个学生项目 在这个项目中,我希望在到达视图之前对实体集合进行排序。这可以通过以下方式完成: 在多对一关系的实体上的getter中,在多个方面使用comparator方法,在一个方面由getter中的usort()方法使用。下面我有一个方法,它还可以填补“日”实体集合(以日记的形式)中的空白,但关键是它使用usort对日进行排序 在用户实体类中:Model view controller Symfony2最佳实践-实体排序,model-view-controller,sorting,symfony,architecture,doctrine,Model View Controller,Sorting,Symfony,Architecture,Doctrine,我正在Symfony2中创建一个应用程序。这是我第一次使用框架进行开发,也是我的第一个项目之一。这是一个学生项目 在这个项目中,我希望在到达视图之前对实体集合进行排序。这可以通过以下方式完成: 在多对一关系的实体上的getter中,在多个方面使用comparator方法,在一个方面由getter中的usort()方法使用。下面我有一个方法,它还可以填补“日”实体集合(以日记的形式)中的空白,但关键是它使用usort对日进行排序 在用户实体类中: public function getDaysWi
public function getDaysWithNulls()
{
$days = $this->getDays()->toArray();
//get the first day and find out how many days have passed
usort($days, array("\Pan100\MoodLogBundle\Entity\Day", "daySorter"));
$firstEntry = $days[0];
$interval = $firstEntry->getDate()->diff(new \DateTime());
$numberOfDaysBack = $interval->d;
//create an array consisting of the number of days back
$daysToShow = array();
for ($i=0; $i < $numberOfDaysBack ; $i++) {
$date = new \DateTime();
$date->sub(new \DateInterval('P' . $i . 'D'));
$daysToShow[] = $date;
}
$daysToReturn = array();
foreach ($daysToShow as $day) {
//figure out if this day has an entity, if not set an empty Day object
$dayEntityToProcess = new \Pan100\MoodLogBundle\Entity\Day();
$dayEntityToProcess->setDate($day);
foreach ($days as $dayEntity) {
//check if there is a day entity
if($day->format('Y-m-d') == $dayEntity->getDate()->format('Y-m-d')) {
$dayEntityToProcess = $dayEntity;
}
}
$daysToReturn[] = $dayEntityToProcess;
}
//return a collection
return new \Doctrine\Common\Collections\ArrayCollection($daysToReturn);
}
static function daySorter($dayEntity1, $dayEntity2) {
$interval = $dayEntity1->getDate()->diff($dayEntity2->getDate());
if($interval->invert == 1) {
return +1;
}
else if ($interval->invert == 0) {
return 0;
}
else return -1;
}
我的问题是:这是排序和返回已排序集合的最佳实践,还是应该在其他地方进行排序?我确实认为这是一种tedoius方法。所以我在网上搜索了一下,读了更多,发现我可以创建自定义存储库 我会这样做: 编辑:发现排序最好在注释中完成:
/**
* @ORM\OneToMany(targetEntity="Day", mappedBy="user_id")
* @ORM\OrderBy({"date" = "DESC"})
**/
protected $days;
我确实认为这是一种泰迪乌斯式的做法。所以我在网上搜索了一下,读了更多,发现我可以创建自定义存储库 我会这样做: 编辑:发现排序最好在注释中完成:
/**
* @ORM\OneToMany(targetEntity="Day", mappedBy="user_id")
* @ORM\OrderBy({"date" = "DESC"})
**/
protected $days;
注意:我在某个地方读到,不应该在实体类中使用EntityManager进行查询,因为它将层绑定在一起。否则,我可以查询EntityManager,查询按天排序的天数。有一点注释:我在某处读到,不应该在实体类中使用EntityManager进行查询,因为它将层绑定在一起。否则,我就可以查询EntityManager中按天排序的天数。