【问题标题】:How to use Char_Length IN Dql如何在 Dql 中使用 Char_Length
【发布时间】:2014-09-02 08:38:46
【问题描述】:

我需要什么:

  • 我需要按降序排列订单文本。

这是我的 dql 查询:

        $from='Entities\EventOrganizer eo';
        $qb = $this->em->createQueryBuilder();
        $qb->select('eo.metadata ')
        ->add('from', $from)
        ->where('eo.event = '.$this->event->getId())
        ->andWhere('eo.edition='.$this->event->getEventEdition()->getId())
        ->andWhere('eo.organizerType=5')
        ->andwhere("eo.entityType='U'")
        ->andwhere("eo.published=1")
        ->orderBy('char_length(eo.metadata)','desc');
        $query = $qb->getQuery();
        $result = $query->getResult();
        echo $query->getSQl();
        $this->cache->SaveObject($str, $result);
  • 我已经参考了链接:https://gist.github.com/smottt/1615966
  • 根据链接,我在 config.yml 文件中进行了更改

    entity_managers:
        default:
            dql:
                numeric_functions:
                    char_length:       
     Acme\bundlename\Extension\Doctrine\Query\Mysql\CharLength.
    

我得到错误:

       PHP Fatal error:  Uncaught exception 'Doctrine\\ORM\\Query\\QueryException' 
       with message 'SELECT eo.metadata  FROM Entities\\EventOrganizer eo WHERE eo.event 

    = 127632 AND eo.edition=10 AND eo.organizerType=5 AND eo.entityType='U' AND 
    eo.published=1 ORDER BY length(eo.metadata) desc' in /home/ind/public_html/serve-bizt-
    com/application/libraries/Doctrine/ORM/Query/QueryException.

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

    你要找的功能是

    LENGTH()
    

    它会像你的查询一样工作

    $from='Entities\EventOrganizer eo';
        $qb = $this->em->createQueryBuilder();
        $qb->select('eo.metadata, LENGTH(eo.metadata) AS HIDDEN len')
        ->add('from', $from)
        ->where('eo.event = '.$this->event->getId())
        ->andWhere('eo.edition='.$this->event->getEventEdition()->getId())
        ->andWhere('eo.organizerType=5')
        ->andwhere("eo.entityType='U'")
        ->andwhere("eo.published=1")
        ->orderBy('len','desc');
        $query = $qb->getQuery();
        $result = $query->getResult();
        echo $query->getSQl();
        $this->cache->SaveObject($str, $result);
    

    如果您不想解析结果,HIDDEN 很重要 ;)

    但尝试在 EO 存储库中实现更好的查询

    $query_builder = $this->createQueryBuilder('eo')
                      ->select('eo.metadata, LENGTH(eo.metadata) AS HIDDEN len')
                      ->where('eo.event = :event_id')
                      ->andWhere('eo.edition = :event_edition_id')
                      ->andWhere('eo.organizerType=5')
                      ->andwhere("eo.entityType='U'")
                      ->andwhere("eo.published=1")
                      ->orderBy('len','desc')
                      ->setParameter('event_id', $this->event->getId())
                      ->setParameter('event_edition_id',$this->event->getEventEdition()->getId();
    
        $result = $query_builder->getQuery()->getResult();
    

    http://docs.doctrine-project.org/en/2.1/reference/dql-doctrine-query-language.html#dql-functions

    【讨论】:

    • 感谢 sr 的帮助我被困在这个问题表单中几个小时了,谢谢 sr
    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    相关资源
    最近更新 更多