CakePHP 3.x mapReduce无法查询多条记录

时间:2016-09-26 08:59:27

标签: cakephp mapreduce cakephp-3.0

我有一个包含CakePHP 3.x的CourseSubjectChapter表的数据库。它们之间的关系如下:

Courses        belongsToMany  Subjects
Courses        belongToMany   Chapters

Subjects       belongToMany   Courses
Subjects       hasMany        Chapters
Subjects       hasMany        ChildSubjects
Subjects       belongsTo      ParentSubjects

Chapters       belongToMany   Courses
Chapters       belongTo       Subjects

我需要检索包含CoursesSubjectsSubjects.ChildSubjectsSubjects.Chapters且具有相同路线的所有Subjects.ChildSubjects.Chapters。我开发了一个带有mapReduce的自定义查找器,它删除/取消设置/修改所有包含的内容以及相关的包含,这些不是相同的课程。当单个课程通过课程查询返回时,它工作正常。但是,当它返回多个课程时,Subjects.ChildSubjectsSubjects.ChildSubjects.Chapters将无法正确返回。

我从Cookbook中找到了原因,mapReduce()方法是一种从数据库中提取结果后处理结果的方法。这就是为什么当我删除/取消设置/修改一门课程的结果时,它也会受到另一门课程的影响。

在我的情况下如何解决/跳过这个问题?在我的案例中,formatResults是最好的方法吗?

1 个答案:

答案 0 :(得分:1)

我终于解决了这个问题。 <span class="[classes]"> <a href="#" class="[classes]" style="float: right; display: none;"> Cancel</a> <input id="[id]" class="multi_file_upload single" type="file" name="filedata" multiple="" data-path="[path]"> </span> 方法是一种在从数据库中提取结果后处理结果的方法,而mapReduce()方法是在从提取的结果中修饰后处理结果集的方法。

当我将formatResults()转换为mapReduce时,它运行正常。我的formatResults如下所示:

mapReduce

我将其更改为$mapper = function ($course, $key, $mapReduce) { // start of mapper logic ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... // end of mapper logic $mapReduce->emit($course, $key); }; $query->mapReduce($mapper); ,如下所示:

formatResults