我有一个包含CakePHP 3.x的Course
,Subject
和Chapter
表的数据库。它们之间的关系如下:
Courses belongsToMany Subjects
Courses belongToMany Chapters
Subjects belongToMany Courses
Subjects hasMany Chapters
Subjects hasMany ChildSubjects
Subjects belongsTo ParentSubjects
Chapters belongToMany Courses
Chapters belongTo Subjects
我需要检索包含Courses
,Subjects
,Subjects.ChildSubjects
和Subjects.Chapters
且具有相同路线的所有Subjects.ChildSubjects.Chapters
。我开发了一个带有mapReduce
的自定义查找器,它删除/取消设置/修改所有包含的内容以及相关的包含,这些不是相同的课程。当单个课程通过课程查询返回时,它工作正常。但是,当它返回多个课程时,Subjects.ChildSubjects
和Subjects.ChildSubjects.Chapters
将无法正确返回。
我从Cookbook中找到了原因,mapReduce()
方法是一种从数据库中提取结果后处理结果的方法。这就是为什么当我删除/取消设置/修改一门课程的结果时,它也会受到另一门课程的影响。
在我的情况下如何解决/跳过这个问题?在我的案例中,formatResults
是最好的方法吗?
答案 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