1

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

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

所以我有一个表 B 与表 A 具有多对多关系,并且与表 C 也具有多对多关系。

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

这就是我在 Table 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。如果我删除群组通话,我将获得构建所需结果所需的所有数据。我怎样才能使这项工作?

4

1 回答 1

0

我很抱歉,因为我忽略了问题中的 Cakephp 版本号(即 3)。请找到我的编辑如下:

对于 Cakephp 3 中的多个连接,请在此处查看文档

检查此示例代码:

$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 不要尝试生成实体(在此处查看)。如果您希望生成实体,请尝试删除该部分。

于 2015-10-27T20:46:54.460 回答