cakephp - 如何在 cakephp-3 中创建自定义列表查找方法?
问题描述
在我的代码中,我使用自定义 keyField 和 valueField 重用列表查找操作,如下所示:
->find('list', [
'keyField' => 'key',
'valueField' => 'value'
])
我想定义一个自定义的list-find方法来设置keyField和valueField,所以我不必重复自己。此外,它应该可以与其他自定义查找方法链接。
解决方案
编辑:通过在自定义查找器中调用 findList 的简单而清晰的解决方案:
public function findCustomList(Query $query, array $options)
{
return $this->findList($query, [
'keyField' => 'key',
'valueField' => 'value',
]);
}
第一个答案:
可以使用 query-Object 的 formatResults-method 来注册一个格式化程序,它将结果格式化为所需的列表:
public function findCustomList(Query $query, array $options)
{
$query->formatResults(function ($results) {
/** @var \Cake\Collection\CollectionInterface $results */
$formatedResults = [];
foreach ($results as $key => $result) {
$formatedResults[$result->key] = $result->value;
}
return new Collection($formatedResults);
});
return $query;
}
推荐阅读
- javascript - 基于endWith的html动态dropwon菜单
- c - 关于hackerrank中的字典和地图问题
- node.js - 为什么我的 Node.js/Express 应用程序没有从我的 MongoDB 数据库返回记录?
- html - 通过其类和 id 自定义 html 元素
- javascript - 如何抽象不同模块的事件
- javascript - dc.js Vue 渲染图表不正确
- c - 反映cs50。试图反映图像,但只交换第一行像素
- python - 出于某种原因,我删除 RT 的正则表达式无法正常工作
- python - 获取位置字符串的最后一个单词,“纽约”、“北达科他州”、“南卡罗来纳州”等特殊情况除外
- ios - 适用于 iOS 的 Azure DevOps Pipeline - Fastlane 匹配克隆问题