我如何对这个学说查询返回的实体对象数组进行排序?
How could I sort the array of entity objects returned by this doctrine query?
对于下面的路线,我想 return 当前日期或之后的 事件 的列表 - 但是我遇到了问题只知道怎么做:
- Return 所有对象按日期排序
- Return 'today'
之后的所有对象
...但我不知道如何同时进行。
下面是我当前的代码:
控制器
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Entity\Events;
class DefaultController extends Controller
{
/**
* @Route("/events", name="events")
*/
public function eventsAction(Request $request)
{
$calendar = $this->getDoctrine()->getRepository('AppBundle:Events')->findAll();
$criteria = new \Doctrine\Common\Collections\Criteria();
$criteria->where($criteria->expr()->gt('eventdate',new \DateTime('now') ));
$list=$calendar->matching($criteria);
if (!$calendar) {
throw $this->createNotFoundException('No event found for ID ',$list);
}
return $this->render('default/events.html.twig', array(
'title' => 'Events',
'list' => $list,
'message' => '',
));
}
}
实体存储库
namespace AppBundle\Entity\Repository;
use Doctrine\ORM\EntityRepository;
class EventRepository extends EntityRepository
{
public function findAll()
{
return $this->findBy(array(), array('eventdate' => 'ASC'));
}
}
事件实体
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Events
*
* @ORM\Table(name="Events")
* @ORM\Entity
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\EventRepository")
*/
class Events
{
/**
* @var \DateTime
*
* @ORM\Column(name="EventDate", type="date", nullable=false)
*/
private $eventdate;
/* .... */
}
// 在您的存储库中
public function getAllFutureEvents()
{
return $this->getEntityManager()->createQuery(
'SELECT b FROM AppBundle:Event e
WHERE e.eventdate > CURRENT_DATE()
ORDER BY e.eventdate DESC'
)->getResult();
}
// 在你的控制器中:
$events = $this->getDoctrine()->getRepository('AppBundle:Events')->getAllFutureEvents();
对于下面的路线,我想 return 当前日期或之后的 事件 的列表 - 但是我遇到了问题只知道怎么做:
- Return 所有对象按日期排序
- Return 'today' 之后的所有对象
...但我不知道如何同时进行。
下面是我当前的代码:
控制器
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Entity\Events;
class DefaultController extends Controller
{
/**
* @Route("/events", name="events")
*/
public function eventsAction(Request $request)
{
$calendar = $this->getDoctrine()->getRepository('AppBundle:Events')->findAll();
$criteria = new \Doctrine\Common\Collections\Criteria();
$criteria->where($criteria->expr()->gt('eventdate',new \DateTime('now') ));
$list=$calendar->matching($criteria);
if (!$calendar) {
throw $this->createNotFoundException('No event found for ID ',$list);
}
return $this->render('default/events.html.twig', array(
'title' => 'Events',
'list' => $list,
'message' => '',
));
}
}
实体存储库
namespace AppBundle\Entity\Repository;
use Doctrine\ORM\EntityRepository;
class EventRepository extends EntityRepository
{
public function findAll()
{
return $this->findBy(array(), array('eventdate' => 'ASC'));
}
}
事件实体
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Events
*
* @ORM\Table(name="Events")
* @ORM\Entity
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\EventRepository")
*/
class Events
{
/**
* @var \DateTime
*
* @ORM\Column(name="EventDate", type="date", nullable=false)
*/
private $eventdate;
/* .... */
}
// 在您的存储库中
public function getAllFutureEvents()
{
return $this->getEntityManager()->createQuery(
'SELECT b FROM AppBundle:Event e
WHERE e.eventdate > CURRENT_DATE()
ORDER BY e.eventdate DESC'
)->getResult();
}
// 在你的控制器中:
$events = $this->getDoctrine()->getRepository('AppBundle:Events')->getAllFutureEvents();