在 CakePHP 中将计数查询转换为包含语句中的列表

Posted

技术标签:

【中文标题】在 CakePHP 中将计数查询转换为包含语句中的列表【英文标题】:Converting count query to a list in contain statement in CakePHP 【发布时间】:2016-08-26 08:37:58 【问题描述】:

我有一个自定义查找器,可以为当前用户获取某个项目的通知。通知按其消息分组,例如“new_comment”。查询结果中有消息,message_count

有没有办法在 finder 中以 key => value 格式转换此查询,以便我可以在 message => message_format 中使用它

//finder code;
return $query->contain([
        'Notifications' => function ($q)use($userId) 

            $q->select(['item_id','message','message_count'=> 'COUNT(message)']);
            $q->where(['Notifications.user_id' => $userId]);
            $q->group(['Notifications.message']);

            return $q;
        
    ]);

【问题讨论】:

快速更新。我意识到我可以使用 collection($q)->combine('message', 'message_count');在 $query 之后,但是当我从中返回它时会引发错误。调用未定义的方法 ArrayIterator::aliasFields() 为什么不使用 counterCache book.cakephp.org/3.0/en/orm/behaviors/counter-cache.html 在 users 表中存储计数并使用简单的 find('list') 来检索消息? 使用 Cake\Collection\Collection 的 combine 方法。 @user3733648 检查我上面的第一条评论。 【参考方案1】:

使用Cake\Collection\Collectioncombine方法

【讨论】:

我已经在原帖中提到过尝试这种方法,但它不起作用。

以上是关于在 CakePHP 中将计数查询转换为包含语句中的列表的主要内容,如果未能解决你的问题,请参考以下文章

在java中将时间戳转换为日期并显示计数值[重复]

如何拦截CakePHP 3中的检索字段?

在 C++ 中将科学计数法转换为十进制

pyspark 在循环中将数组转换为字符串

在 Select 语句中将 DateTime 转换为 Unix 时间戳?

如何删除或更改postgresql上的cakephp分页计数查询?