Aru*_*son 1 php symfony doctrine-orm
我需要根据列的值对列进行排序。
$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
Run Code Online (Sandbox Code Playgroud)
上面是我的查询,我需要对其进行排序“vwpm.tagStatusValue = 3”,我将如何在 Doctrine Query Builder 中实现它......
首先,您不能orderBy在 DQL 中放入表达式,但可以使用计算列。
也没有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');
Run Code Online (Sandbox Code Playgroud)
请注意HIDDEN中的关键字addSelect。没有它就无法工作。