如何在 cakephp-3 中创建自定义列表查找方法?
How can I create a custom list find methd in cakephp-3?
在我的代码中,我重用了带有自定义 keyField 和 valueField 的列表查找操作,如下所示:
->find('list', [
'keyField' => 'key',
'valueField' => 'value'
])
我想定义一个自定义的列表查找方法来设置 keyField 和 valueField,这样我就不必重复了。它还应该可以与其他自定义查找方法链接。
编辑:通过在自定义查找器中调用 findList 来简单明了的解决方案:
public function findCustomList(Query $query, array $options)
{
return $this->findList($query, [
'keyField' => 'key',
'valueField' => 'value',
]);
}
第一个答案:
可以使用 query-Object 的 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;
}
在我的代码中,我重用了带有自定义 keyField 和 valueField 的列表查找操作,如下所示:
->find('list', [
'keyField' => 'key',
'valueField' => 'value'
])
我想定义一个自定义的列表查找方法来设置 keyField 和 valueField,这样我就不必重复了。它还应该可以与其他自定义查找方法链接。
编辑:通过在自定义查找器中调用 findList 来简单明了的解决方案:
public function findCustomList(Query $query, array $options)
{
return $this->findList($query, [
'keyField' => 'key',
'valueField' => 'value',
]);
}
第一个答案:
可以使用 query-Object 的 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;
}