基于eZ Publish Search API按父级Training字段排序Session对象
搞定eZ Publish按关联父级Training的code排序Session内容的问题
嘿,我来帮你解决这个排序需求!你现在要通过eZ Publish的Search API获取Session类型的内容列表,并且要按照它们关联的父级Training对象的code字段来排序对吧?比如关联T1的S1要排在关联T2的S2前面,这个需求完全可以通过调整sortClauses来实现。
核心思路是:利用eZ Publish的关联字段排序子句,直接基于Session关联的Training对象的code字段来排序。下面是完整的代码示例,你可以直接替换你原来的sortClauses部分:
// 先构建基础查询条件:只筛选Session类型的内容 $criterions = array( new Criterion\ContentTypeIdentifier('session') ); $locationQuery = new LocationQuery(); $locationQuery->query = new Criterion\LogicalAnd($criterions); // 关键的排序部分:按关联Training的code字段升序排序 $locationQuery->sortClauses = array( new SortClause\Field( 'session', // 当前要查询的内容类型(Session) 'training', // 替换成你Session类型中关联Training的实际字段标识符 'code', // Training类型中用来排序的字段(code) Query::SORT_ASC // 排序方向,升序;降序用Query::SORT_DESC ) ); // 执行查询(这里假设你能获取到searchService) $searchService = $this->getContainer()->get('ezpublish.api.service.search'); $searchResult = $searchService->findLocations($locationQuery);
这里有几个需要注意的点:
- 一定要把
'training'替换成你实际项目中Session类型里用来关联Training的字段标识符,比如如果你的字段叫parent_training,就改成这个值 - 确保Training类型的
code字段在后台设置中开启了可搜索选项,不然排序会失效 - 如果需要倒序排列,把
Query::SORT_ASC改成Query::SORT_DESC就行
内容的提问来源于stack exchange,提问作者zizoujab
相关产品推荐
相关产品推荐

