我如何创建一个自定义列表在cakephp-3中找到方法?

时间:2018-07-29 07:53:19

标签: cakephp cakephp-3.0

在我的代码中,我将重用带有自定义keyField和valueField的列表查找操作,如下所示:

->find('list', [
     'keyField' => 'key',
     'valueField' => 'value'
])

我想定义一个自定义列表查找方法来设置keyField和valueField,所以我不必重复自己。另外,它应该可以与其他自定义方法链接在一起。

1 个答案:

答案 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;
}