簡體   English   中英

在Doctrine查詢生成器中,如何通過=實體的列名來實現排序

[英]In Doctrine Query Builder, how to achieve order by = a column name of a entity

我需要根據列的值對列進行排序。

    $vtpQb = $entityManager->createQueryBuilder();
                $vtpQb
                ->from("AppBundle:TrPlace","trplace")
                ->select($view_fectch_fields)
                ->join('AppBundle:TrVwPlacePrivateMarkers', 'vwpm','WITH','trplace.id = vwpm.placeId')
                ->where('vwpm.userid = :userid')
                ->setParameter("userid",$userid)
                ->orderBy('vwpm.tagStatusValue', 'DESC');
                //->orderBy('vwpm.tagStatusValue = 3', 'DESC'); got errorvwpm.tagStatusValue

上面是我的查詢,我需要對其進行排序'vwpm.tagStatusValue = 3',我將如何在Doctrine查詢生成器中實現它。

第一件事是您不能將表達式放在DQL中的orderBy中,但是可以使用計算列。

也沒有MySQL的IF ,但是有CASE WHEN

這對我有用。 我添加了addSelect並更改了orderBy部分。

$vtpQb = $entityManager->createQueryBuilder();
            $vtpQb
            ->from("AppBundle:TrPlace","trplace")
            ->select($view_fectch_fields)
            ->addSelect('(CASE WHEN vwpm.tagStatusValue = 3 THEN 1 ELSE 0 END) AS HIDDEN ordCol')
            ->join('AppBundle:TrVwPlacePrivateMarkers', 'vwpm','WITH','trplace.id = vwpm.placeId')
            ->where('vwpm.userid = :userid')
            ->setParameter("userid",$userid)
            ->orderBy('ordCol', 'DESC');

請注意addSelect HIDDEN關鍵字。 沒有它就無法工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM