You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让CakePHP中find()结果的主表数据以模型名数组返回?

如何让CakePHP查询结果将主表数据包裹在模型名数组中?

你可以通过以下几种方式实现需求:

方法1:使用框架原生的wrapResults参数

在查询时添加wrapResults配置,让主表数据自动包裹到对应模型名的键下:

function get() {
    return $this->find('all', [
        'contain' => 'TopicMasters',
        'wrapResults' => true
    ])->first()->toArray();
}

该方法会把主表ArticleMains的数据封装到article_main键中,和关联表的topic_master保持统一层级结构。

方法2:手动构造目标结构数组

如果需要精细控制字段范围,可以手动提取数据并重组结构:

function get() {
    $entity = $this->find('all', ['contain' => 'TopicMasters'])->first();
    
    return [
        'article_main' => $entity->toArray(),
        'topic_master' => $entity->topic_master->toArray()
    ];
}

注:若只需主表部分字段,可使用extract()指定字段,例如$entity->extract(['id', 'title'])。

方法3:使用formatResults批量处理结果

如果需要处理多条查询结果,formatResults可实现批量转换结构:

function get() {
    return $this->find('all', ['contain' => 'TopicMasters'])
        ->formatResults(function ($results) {
            return $results->map(function ($entity) {
                return [
                    'article_main' => $entity->toArray(),
                    'topic_master' => $entity->topic_master->toArray()
                ];
            });
        })
        ->first();
}

内容的提问来源于stack exchange,提问作者tkym

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:40:42