php - 通过 PersistentCollection 对结果进行排序

标签 php mysql symfony orm dql

我有一个函数可以获取今天所有的“网络旅游”。

我有一个像这样的自定义存储库:

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/

相关文章:

java - Solr 3.4 Geodist 函数,不正确/或不需要的结果

php - 用于插入 MySql 数据的网站中的 PHP SESSION 是否安全

mysql - 显示当今最受欢迎的商品?

mysql - 当我刷新浏览器时,在 mysql 中上传表单重复文件

php - 指定源语言,如果 default_locale 不是英语

php - 使用 MySQLi 连接到多个数据库

php - USSD(状态机)应用算法

php - 为 PHP 生成的 div 创建唯一标识符?

symfony - 如何在 Symfony2 路由中定义默认日期值?

php - Vagrant + Apache + PHP 在 Windows 上运行速度极慢