首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2最佳实践-实体排序

Symfony2最佳实践-实体排序
EN

Stack Overflow用户
提问于 2013-04-01 16:20:51
回答 1查看 394关注 0票数 1

我正在用Symfony2创建一个应用程序。这是我第一次使用框架和我的第一个项目进行开发。这是一个学生项目。

在这个项目中,我希望在到达视图之前对实体集合进行排序。这样做是可以做到的:

在多对一关系上的实体上的getter中,在多端的比较器方法中,usort()方法在一侧的getter中使用。下面我有一个方法,它也填补了“日”实体集合中的空白(以日记的形式),但重点是它用usort对日子进行排序。

在用户实体类中:

代码语言:javascript
复制
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);
}

usort在类中使用此方法:

代码语言:javascript
复制
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;
}

我的问题是:这是排序和返回已排序集合的最佳实践,还是应该在其他地方进行排序?

EN

回答 1

Stack Overflow用户

发布于 2013-04-01 16:32:35

我确实认为这是一种很好的方式。因此,我搜索了一下网络,并阅读了更多,发现我可以创建自定义存储库。

我会这样做的:

http://symfony.com/doc/2.1/book/doctrine.html#custom-repository-classes

编辑:发现排序在注释中做得更好:

代码语言:javascript
复制
/**
 * @ORM\OneToMany(targetEntity="Day", mappedBy="user_id")
 * @ORM\OrderBy({"date" = "DESC"})     
 **/    
protected $days;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15747141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档