繁体   English   中英

MapReduce在CakePHP 3.x中不起作用

[英]MapReduce not working in CakePHP 3.x

我正在使用CakePHP 3.x,我的应用程序添加/编辑页面,在编辑操作中我正在使用此代码。

 $patient = $this->Patients->get($patientId);

得到病人的记录。

现在我想修改一些字段的值,发现手术后,让说,我想转换dob场(DATE_OF_BIRTH)转换成不同的日期格式,在CakePHP的2.x的它有可能afterFind回调,但在CakePHP中3.X 这里的最后一段它声明,

如果需要在获取结果后修改结果,则应使用“使用Map / Reduce修改结果”功能来修改结果。 map reduce功能取代了以前版本的CakePHP中的'afterFind'回调。

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

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

为了使用任何一个,即mapper / reducer或formatter,你必须使用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();

也可以看看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM