在我的代码中,我将重用带有自定义keyField和valueField的列表查找操作,如下所示:
->find('list', [
'keyField' => 'key',
'valueField' => 'value'
])
我想定义一个自定义列表查找方法来设置keyField和valueField,所以我不必重复自己。另外,它应该可以与其他自定义方法链接在一起。
答案 0 :(得分:0)
编辑:通过在自定义查找器中调用findList来实现简单明了的解决方案:
public function findCustomList(Query $query, array $options)
{
return $this->findList($query, [
'keyField' => 'key',
'valueField' => 'value',
]);
}
第一个答案:
可以使用查询对象的formatResults方法注册格式化程序,该格式化程序会将结果格式化为所需的列表:
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;
}