在 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\Collection
的combine
方法
【讨论】:
我已经在原帖中提到过尝试这种方法,但它不起作用。以上是关于在 CakePHP 中将计数查询转换为包含语句中的列表的主要内容,如果未能解决你的问题,请参考以下文章