【问题标题】:CakePHP 3 Query builder order by nested relationsCakePHP 3 按嵌套关系查询构建器顺序
【发布时间】:2015-10-27 18:49:20
【问题描述】:

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

表A 表B 表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();

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

【问题讨论】:

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


    【解决方案1】:

    我很抱歉,因为我忽略了问题中的 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 不要尝试生成实体(检查here)。如果您希望生成实体,请尝试删除该部分。

    【讨论】:

    • 此代码对 cakephp 2 而非 cakephp 3 有效。此外,此示例不使用 order 函数。你能帮我解决我的具体问题吗?谢谢
    • 很抱歉过度寻找版本号。我相应地修改了答案,检查它是否符合您的需求(订单功能只是查找的另一个嵌套,我将其添加到答案中)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多