如何让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
相关产品推荐
相关产品推荐

