CakePHP 3按嵌套关系查询构建器顺序

时间:2015-10-27 18:49:21

标签: cakephp orm query-builder cakephp-3.x

订单功能的文档不够好。这就是我所拥有的:

表A< ---- MiddleTableAB ---->表B< --- MiddleTableBC --->表C

所以我有一个表B,它与表A有很多关系,并且与表C有很多关系。

我需要的是表B中的项目列表。它们需要按表A的ID分组,然后按表C的ID分组。

这就是我在表B功能中所拥有的:

    $query=$this->find();
    $query->contain([
        'MiddleTableAB.TableA'=> function ($q) {
                return $q->select(['id','name']);
            },
        'MiddleTableBC.TableC'=> [
            'strategy' => 'select',
            'queryBuilder' => function ($q) {
                    return $q->select(['id','name']);
            },
        ]
    ]);
    //$query->select(['id','description']);
    $query->group(['TableA.id','TableC.id']);
    $data = $query->all();

但是蛋糕说没有TableA.id。 如果我删除组呼,我将获得构建所需结果所需的所有数据。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

我道歉,因为我忽略了问题中的Cakephp版本号(即3)。请查看我的编辑内容如下:

对于Cakephp 3中的多个联接,请查看文档here

检查此示例代码:

$query = $countries->find()
        ->hydrate(false)
        ->join([
            'City' => [
                'table' => 'cities',
                'type' => 'LEFT',
                'conditions' => 'Country.id = City.country_id'
            ],
            'Address' => [
                'table' => 'addresses',
                'type' => 'LEFT',
                'conditions' => 'City.id = Address.city_id'
            ]
        ])
        ->order(['state' => 'DESC']);

在上文中,hydratate方法告诉ORM不要尝试生成实体(Check here)。如果您希望生成实体,请尝试删除该部分。