如何在CakePHP 3.0中构建这个复杂的数据库查询?

这是我的数据库设计,或者至少是与此问题相关的表.

我想构建一个返回单个页面的查询(find将基于path属性),以及相关的容器,其关联的子容器采用线程形式,并且所有这些容器都应单独使用它们的关联块(最好按照从blocks_pages表的索引列排序的正确顺序).

任何人都可以告诉我如何用查询构建器包装所有内容吗?或者如果那是不可能的,那么是否可以使用新的map / reduce功能来实现,因为已经删除了after-find功能?

如果它有帮助,这将是可视化的结果,如果您暂时忽略洋红色的条款框.

最佳答案 试试这个

$pagesTable
  ->find()
  ->where(['path' => $myPath])
  ->contain([
   'Containers.ChildContainers' => function($q) {
      return $q->formatResults(function($results) {
        return $results->map(function($container) {
            $container->nested = $container->source()
              ->find('children', ['for' => $container->id])
              ->find('threaded')
              ->contain(['Blocks']);
            return $container;
        });
      });
   },
   'Containers.ChildContainers.Blocks'
  ])
点赞