Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MapReduce在CakePHP 3.x中不工作_Php_Cakephp_Mapreduce_Cakephp 3.x - Fatal编程技术网

MapReduce在CakePHP 3.x中不工作

MapReduce在CakePHP 3.x中不工作,php,cakephp,mapreduce,cakephp-3.x,Php,Cakephp,Mapreduce,Cakephp 3.x,我使用的是CakePHP3.x,我的应用程序有添加/编辑页面,在编辑操作中,我使用的是这段代码 $patient = $this->Patients->get($patientId); 获取患者的病历 现在我想在find操作后修改一些字段的值,比如我想将dob字段(出生日期)转换成不同的日期格式,在CakePHP 2.x中,在afterFind回调中是可能的,但在CakePHP 3.x的最后一段中,它声明 如果在获取结果后需要修改结果,则应使用函数修改结果。map reduce功

我使用的是CakePHP3.x,我的应用程序有添加/编辑页面,在编辑操作中,我使用的是这段代码

 $patient = $this->Patients->get($patientId);
获取患者的病历

现在我想在find操作后修改一些字段的值,比如我想将
dob
字段(出生日期)转换成不同的日期格式,在CakePHP 2.x中,在
afterFind
回调中是可能的,但在CakePHP 3.x的最后一段中,它声明

如果在获取结果后需要修改结果,则应使用函数修改结果。map reduce功能取代了CakePHP早期版本中的“afterFind”回调


我也曾使用过
MapReduce
,但它对我不起作用。

Map/reduce对于这样一个简单的任务来说有点过火了,我建议改用结果格式化程序,即
Query::formatResults()

为了使用其中任何一种,即映射器/还原器或格式化程序,必须使用
Table::find()
而不是
Table::get()
,因为后者不返回查询,而是返回结果,并且选项不支持映射器/还原器或格式化程序

但是,根据需要格式化值的位置,助手、虚拟字段或仅在必要时格式化可能是更好的选择

无论如何,这里有一个基本的例子:

$patient = $this->Patients
    ->find();
    ->where([
        'id' => $patientId
    ])
    ->formatResults(function($results) {
        /* @var $results \Cake\Datasource\ResultSetInterface|\Cake\Collection\CollectionInterface */
        return $results->map(function($row) {
            // note that now `dob` is a string!
            $row['dob'] = $row['dob']->i18nFormat('dd. MMMM yyyy');
            return $row;
        });
    })
    ->firstOrFail();
另见

“不工作”不是正确的问题描述。请更具体地说明您的尝试到底有什么问题。