我试图找出如何在ORM find()方法中的cakephp3顺序函数中创建自定义顺序函数。
假设我有以下模型
User
name
...
custom_data
custom_data
type
每个用户都有一个自定义数据,其中type是[20,30,40]之一。
我需要按以下方式订购
if ( type == 20 ) {
// put in first positions
} else {
// put this records after users with custom_data->type != 20
}
我需要在paginator中使用它,所以我需要像
这样的东西$this->Users
->find()
->where([ something ] )
->order( 'ASC' => here is my custom function )
有什么建议吗?
答案 0 :(得分:0)
首先,根据您的描述,听起来好像您需要使用DESC
,因为您说您想要首先匹配条件的记录。按升序排列,这些记录将持续到位。
话虽这么说,最简单的方法是使用基本条件,即SQL明智之类的东西:
ORDER BY type = 20 DESC
它也可以使用CASE
语句来解决,但如果你有这么简单的要求,它就不是必需的。
$query = $this->Users->find();
$query
->where(/* .. */)
->orderDesc(
$query->newExpr()->add(['type' => 20])
);
可以通过对order()
,orderAsc()
,orderDesc()
的其他来电添加更多订购声明。
另见