[英]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.