我有一个函数可以获取今天所有的“网络旅游”。
我有一个像这样的自定义存储库:
public function toursTodayByNetwork($network){
$todayStart = \DateTime::createFromFormat( "Y-m-d H:i:s", date("Y-m-d 00:00:00") );
$todayEnd = \DateTime::createFromFormat( "Y-m-d H:i:s", date("Y-m-d 23:59:59") );
return $this->getEntityManager()
->createQuery(
'SELECT p FROM AppBundle:Tour p JOIN AppBundle:Schedule s WHERE p.id = s.tour AND p.network = :network AND s.start >= :todayStart AND s.start <= :todayEnd'
)
->setParameter('todayStart',$todayStart)
->setParameter('todayEnd',$todayEnd)
->setParameter('network',$network)
->getResult();
}
Tour
实体与 Object
实体具有 OneToMany
关系。
我现在想按 AppBundle:Object
中的 filiale
列对整个内容进行排序,正如您所看到的,它不在查询中,所以我不能简单地只需ORDER BY
。
我尝试过
/**
* @ORM\OneToMany(targetEntity="Object", mappedBy="tour")
* @ORM\OrderBy({"filiale" = "DESC"})
*/
protected $object;
但这并没有改变任何事情。
THIS看起来像是我必须做的事情,但我不明白将 EventListener 放在哪里?我还相信我可能只需要更改查询?
最佳答案
您必须加入您的对象表:
public function toursTodayByNetwork($network){
$todayStart = \DateTime::createFromFormat( "Y-m-d H:i:s", date("Y-m-d 00:00:00") );
$todayEnd = \DateTime::createFromFormat( "Y-m-d H:i:s", date("Y-m-d 23:59:59") );
return $this->getEntityManager()
->createQuery(
'SELECT p FROM AppBundle:Tour p JOIN p.schedule s JOIN p.object o WHERE p.network = :network AND s.start BETWEEN :todayStart AND :todayEnd ORDER BY o.filiale DESC'
)
->setParameter('todayStart',$todayStart)
->setParameter('todayEnd',$todayEnd)
->setParameter('network',$network)
->getResult();
}
对于日期条件,BETWEEN 是更好的做法,因为 >= AND <=。
关于php - 通过 PersistentCollection 对结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38182931/