在Orm中按值排序子级

在Orm中按值排序子级,orm,cfml,lucee,Orm,Cfml,Lucee,我知道我可以在创建组件时设置特定的orderby属性,并且可以将其添加到EntityLoad方法中。如果我必须以某种方式对一个实体的子实体进行排序,该怎么办 <cfset u = entityLoadByPk('user', 1)> <cfset p = u.getPages()> <!-- sort by date? --> 谢谢 在关系属性定义中使用orderBy属性: component name="user" accessors=true per

我知道我可以在创建组件时设置特定的
orderby
属性,并且可以将其添加到
EntityLoad
方法中。如果我必须以某种方式对一个实体的子实体进行排序,该怎么办

<cfset u = entityLoadByPk('user', 1)>
<cfset p = u.getPages()> <!-- sort by date? -->


谢谢

在关系属性定义中使用
orderBy
属性:

component name="user" accessors=true persistent=true{

 property name="pages" fieldType="one-to-many" cfc="Page" fkColumn="userID" orderBy="date";

}
编辑 上面将设置子实体的默认顺序。要允许其他排序选项,您可以使用
orExecuteQuery()
在用户实体内创建页面排序方法:

或者,为了获得更简洁但不太正统的方法,请尝试hibernate过滤器:

array function pagesOrdered( string column="", string direction="ASC" ){
 //use an array to build up the filter
 var filterString=[ "ORDER BY" ];
 //only allow ordering on specified columns
 if( "title,viewcount,updated".ListFindNoCase( arguments.column ) ){
  filterString.Append( arguments.column );
 } else {
  filterString.Append( "dateCreated" );
 }
 if( arguments.direction IS "DESC" ){
  filterString.Append( "DESC" );
 }
 return OrmGetSession().createFilter( variables.pages,filterString.ToList( " " ) ).list();
}

在关系属性定义中使用
orderBy
属性:

component name="user" accessors=true persistent=true{

 property name="pages" fieldType="one-to-many" cfc="Page" fkColumn="userID" orderBy="date";

}
编辑 上面将设置子实体的默认顺序。要允许其他排序选项,您可以使用
orExecuteQuery()
在用户实体内创建页面排序方法:

或者,为了获得更简洁但不太正统的方法,请尝试hibernate过滤器:

array function pagesOrdered( string column="", string direction="ASC" ){
 //use an array to build up the filter
 var filterString=[ "ORDER BY" ];
 //only allow ordering on specified columns
 if( "title,viewcount,updated".ListFindNoCase( arguments.column ) ){
  filterString.Append( arguments.column );
 } else {
  filterString.Append( "dateCreated" );
 }
 if( arguments.direction IS "DESC" ){
  filterString.Append( "DESC" );
 }
 return OrmGetSession().createFilter( variables.pages,filterString.ToList( " " ) ).list();
}

感谢CFSimply,因此如果我想按名称Asc或Desc对示例结果表进行排序,我想唯一的解决方案是求助于
ORMExecuteQuery
您当然可以使用
ORMExecuteQuery()
来生成有序的结果。但你的问题是关于孩子的关系。您可以在关系的orderBy属性中指定ASC或DESC,例如,
orderBy=“date DESC”
谢谢您的简单性,我感兴趣的是,在页面刷新子项顺序后,当用户单击“变更单”或类似内容时,我怎么翻页?好的,我没有从您的问题中完全理解。我更新了我的答案,并提出了一些建议。很抱歉,我更新的代码中的括号/大括号出现了一些错误。感谢CFSimply,因此如果我想按名称Asc或Desc对示例结果表进行排序,我想唯一的解决方案是求助于
ORMExecuteQuery
您当然可以使用
ORMExecuteQuery()
生成有序结果。但你的问题是关于孩子的关系。您可以在关系的orderBy属性中指定ASC或DESC,例如,
orderBy=“date DESC”
谢谢您的简单性,我感兴趣的是,在页面刷新子项顺序后,当用户单击“变更单”或类似内容时,我怎么翻页?好的,我没有从您的问题中完全理解。我已经用一些建议更新了我的答案。很抱歉,在我更新的代码中有一些括号/括号错误。