1
我在Symfony2中創建應用程序。這是我第一次開發使用框架和我的第一個項目之一。這是一個學生項目。Symfony2最佳實踐 - 實體排序
在這個項目中,我希望我的實體集合在到達視圖之前進行排序。這可以通過以下方式完成:
在獲取多對一關係上的實體的方法中,在getter中的usort()方法所使用的多方比較器方法中,側。在下面,我有一種方法也填補了「日」實體集合中的空白(日記形式),但重點在於它用usort來排序日子。
在用戶實體類:
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使用這個在日實體類:
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;
}
我的問題是:這是排序並返回排序集合中的最佳實踐,或應該在其他地方進行排序嗎?
一點的話:我讀的地方,一個不應該在實體類中使用EntityManager進行查詢,因爲它將圖層連接起來。否則,我可以查詢EntityManager的日期排序日期。 – Piddien