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

时间:2014-07-12 11:27:22

标签: cakephp

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

enter image description here

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

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

如果它有帮助,这将是可视化的结果,如果你暂时忽略洋红色的条款框。 enter image description here

1 个答案:

答案 0 :(得分:2)

试试这个

$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'
  ])